普通winapi c GUI更改静态文本背景



我正在使用普通的winapi c来创建GUI,我是这种语言的新手,并且正在为许多人可能认为是基本的东西而挣扎。有人能向我解释一下我是如何改变静态文本的背景颜色的吗?因为目前是透明的。我用于文本的代码是:

hwndStatic = CreateWindow(TEXT("static"), TEXT(""), 
WS_CHILD | WS_VISIBLE,
10, 70, 90, 25, hwnd, NULL, g_hinst, NULL); 

通常,您可以通过处理WM_GETCTLCOLORSTATIC来更改静态文本控件的绘图。

在该处理程序中,您可以更改DC的内容,如文本颜色、背景模式、背景颜色,甚至所选的字体。

您还可以返回GDI笔刷的句柄(使用类型系统的强制转换来获取它)。控件将首先用画笔擦除自己,然后绘制文本。

回调将发生在作为当前窗口的子级的所有静态控件上,因此您首先测试它是否是您关心的子级。

例如:

case WM_CTLCOLORSTATIC:
HWND hwnd = (HWND) lParam;
if (hwnd == hwndStatic) {
HDC hdc = (HDC) wParam;
::SetTextColor(hdc, RGB(0xFF, 0, 0));  // set the text to red
::SetBkMode(hdc, OPAQUE);
::SetBkColor(hdc, RGB(0x00, 0xFF, 0x00));  // set background to green
HBRUSH hbrBackground = ::GetSysColorBrush(COLOR_WINDOW);  
return (INT_PTR) hbrBackground;
}
return 0;

这展示了你可以做的几件事。你可能不想全部都做,但看到它们都在行动可能会很有教育意义。

请注意,如果创建要返回的笔刷,则必须跟踪它,然后再将其删除。我通过使用GetSysColorBrush避免了这个问题。系统拥有这些,所以你不应该删除它们。您还可以将GetStockObject用于不必管理的系统GDI对象。但是,如果您需要自定义颜色,则必须使用CreateSolidBrush,然后进行清理。

响应程序中的WM_CTLCOLORSTATIC消息,并让它返回正确颜色的画笔对象。

我稍微修改了链接中的示例:

case WM_CTLCOLORSTATIC:
{
HWND hWnd = (HWND) lParam;
if (hWnd == hMyStatic)
{
HBRUSH hbrBkgnd = CreateSolidBrush(RGB(0,0,0));
return (INT_PTR)hbrBkgnd;
}
return 0;
}

最新更新