【发布时间】:2011-05-28 14:05:04
【问题描述】:
我正在使用 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代码的效果限制在您的静态控件中。您的示例存在一个问题,即您创建的所有画笔永远不会被删除。
标签: c++ winapi controls static background-color