我正在使用Windows API创建一个基本的GUI,但是遇到了问题。它开始于一个带有我设置的自定义背景颜色(RGB(230,230,230))
的主窗口。然后,在左上角用静态控件显示文本。
settingstext = CreateWindow("STATIC",
"SETTINGS",
SS_LEFT | WS_CHILD,
12,
20,
100,
20,
hwnd,
NULL,
proginstance,
NULL);
ShowWindow(settingstext, 1);
这种方法能够实现目标,但是当文本被显示时,我需要一种方式来改变它的背景颜色以匹配主窗口,否则它看起来就像没有融入其中。我的问题是,我该如何做到这一点?我目前使用下面的方法并且它可以工作,但我想知道,是否有一种方法在
CreateWindow
函数之后永久设置背景颜色,而不更改系统颜色,并且仅适用于该控件,而不是向发送 WM_CTLCOLORSTATIC
消息的任何内容。我尝试了在消息循环之外使用 GetDC
函数和 SetBkColor
函数进行实验,但是没有任何效果。 case WM_CTLCOLORSTATIC:
{
HDC hdcStatic = (HDC) wParam;
SetTextColor(hdcStatic, RGB(0,0,0));
SetBkColor(hdcStatic, RGB(230,230,230));
return (INT_PTR)CreateSolidBrush(RGB(230,230,230));
}
我希望这样做是因为...
- 我不想让我的消息循环被需要在每次窗口重绘时调用的函数填满。
- 使更改仅应用于此静态控件。
如果能提供任何帮助,至少指引我走向正确的方向,我将非常感激,谢谢。
(HWND)lParam == settingstext
来限制WM_CTLCOLORSTATIC
代码的影响范围,仅作用于你的静态控件。你示例中存在一个问题,即创建的所有画刷都永远不会被删除。 - Brian Nixon