我想更改STATIC窗口的背景颜色,两者都-加载时并在运行时更改它。到目前为止,我已经能够通过以下方式更改颜色:
case WM_CTLCOLORSTATIC:
{
HDC hdcStatic = (HDC)wParam;
SetTextColor(hdcStatic, RGB(200, 200, 20));
SetBkColor(hdcStatic, RGB(10, 10, 10));
SetBkMode(hdcStatic, TRANSPARENT);
return (INT_PTR)CreateSolidBrush(RGB(30, 30, 30));
}
一切正常,并且背景色得到更改,除了任何STATIC窗口(位于另一个静态窗口内)
HWND mainContainer = CreateWindowEx
(
0,
_TEXT("STATIC"),
"",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_SOLID,
10, 10, 500, 500,
hwnd,
NULL,
(HINSTANCE)GetWindowLong(hwnd, GWLP_HINSTANCE),
NULL
);
HWND subItem = CreateWindowEx
(
0,
_TEXT("STATIC"),
"SubItem",
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_SOLID,
10, 10, 100, 100,
mainContainer,
NULL,
(HINSTANCE)GetWindowLong(mainContainer, GWLP_HINSTANCE),
NULL
);
在这种情况下,mainContainer颜色会更改,但subItem的背景颜色不会更改。任何想法为什么会这样?谢谢!
答案 0 :(得分:1)
消息WM_CTLCOLORSTATIC
仅发送到父窗口,而不发送到父窗口。
预定义的静态控制窗口类的窗口过程 对静态控件的所有消息执行默认处理 程序无法处理。
WM_CTLCOLORSTATIC
不在其处理的列表中。因此,预定义的窗口过程会将消息传递给DefWindowProc进行默认处理。
(我们实际上并不经常在另一个静态窗口内放置一个静态窗口。这不是常见的操作。因此,您应将subItem
的父窗口重置为hwnd
。)