我使用以下代码创建静态控件:

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并按照当前的方式重新定位。

10-08 11:25