我想更改 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 的背景颜色不会改变。任何想法为什么会这样?谢谢!
最佳答案
消息 WM_CTLCOLORSTATIC
将只发送到父窗口,而不是父窗口的父窗口。
The window procedure for the predefined static control window class performs default processing for all messages that the static control procedure does not process.
WM_CTLCOLORSTATIC
不在它处理的列表中。所以预定义的窗口过程会将消息传递给DefWindowProc进行默认处理。
(我们真的不经常把一个静态窗口放在另一个静态窗口里面,这不是一个常见的操作。所以你应该将subItem
的父窗口重置为hwnd
.)
关于c++ - 无法更改位于另一个窗口内的窗口的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55340480/