我使用以下代码创建静态控件:
hWnd = CreateWindowExW( 0,
L"STATIC",
Content.c_str(),
SS_LEFT | WS_VISIBLE | WS_CHILD /*| SS_SUNKEN*/,
200,
120,
120,
40,
hWndParent,
NULL,
hInstance,
NULL);
如果在上面的创建代码中启用了
SS_SUNKEN
样式,则创建的静态控件似乎成功凹陷。但是,我想做的是在创建控件之后更改其样式。
我尝试了这个:
void BaseWindowClass::AddStyle(DWORD NewStyle)
{
// NewStyle = 0x00001000 = SS_SUNKEN
LONG oldstyle, changedstyle;
oldstyle=SetWindowLongW(hWnd, GWL_STYLE, changedstyle=GetWindowLongW(hWnd, GWL_STYLE) | NewStyle);
UpdateWindowStyles();
// oldstyle = 0x50000000
// changedstyle = 0x50001000 (everything looks normal)
}
void BaseWindowClass::UpdateWindowStyles()
{
BOOL success;
success=SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
// success = 0x00000001 (non-zero: SetWindowPos sucseeded)
}
说明文件:
SetWindowLong()
SetWindowPos()
我在调用
SetWindowPos()
之后调用SetWindowLongW()
,因为在SetWindowLong的文档中,它说:并且,在SetWindowPos的文档中,它说:
即使更改了
SetWindowLongW()
和SetWindowPos()
,我的静态控件的样式也不会更改。我做错了什么,或者我想念什么?
最佳答案
SS_SUNKEN
有效地在扩展样式(WS_EX_STATICEDGE
)窗口中长时间设置GWL_EXSTYLE
,因此您可以适当地更新GWL_EXSTYLE
并按照当前的方式重新定位。