我正在用Windows API创建一个基本的GUI,并且遇到了问题。它以一个自定义背景色打开的主窗口开始,我设置了(RGB(230,230,230))
。然后它会在静态控件的左上角显示文本。Static Control Background Color with C++
settingstext = CreateWindow("STATIC",
"SETTINGS",
SS_LEFT | WS_CHILD,
12,
20,
100,
20,
hwnd,
NULL,
proginstance,
NULL);
ShowWindow(settingstext, 1);
这工作,但会显示文字时,我需要一种方法来改变它的背景相匹配的主窗口,否则它只是看起来像它不混合。
我的问题是,我该怎么做?我目前使用下面的方法,它的工作原理,但我想知道,有没有办法永久设置背景颜色,在静态控制的CreateWindow
函数之后,而不更改系统颜色,并且只适用于该方法控制,而不是任何发送消息的东西。我尝试过在消息循环之外使用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'代码对静态控制的影响。 你的例子存在一个问题,那就是你创建的所有笔刷都不会被删除。 – 2010-12-21 01:45:59