2

我在一个黑色的窗口上有一些静态文本,我想在运行时使用颜色选择器对话框更改它。我已经成功获取了颜色,现在我只需要更改文字!我已阅读该WM_CTLCOLORSTATIC消息是要处理的消息,尽管这似乎仅适用于最初将控件绘制到屏幕上时。可以WM_PAINT用吗?

到目前为止设置颜色的代码是(WM_CTLCOLORSTATIC以防万一):

if ((HWND)lParam == GetDlgItem(hWnd, uLabelId)
{
    SetBkMode((HDC)wParam, TRANSPARENT);
    SetTextColor((HDC)wParam, crLabelTextColour);
    return (BOOL)CreateSolidBrush(GetSysColor(COLOR_MENU));
}

在处理这个问题时,我可能完全搞错了,所以任何帮助都将不胜感激!

4

2 回答 2

5

你在正确的轨道上WM_CTLCOLORSTATIC。如果要更改颜色,则使控件无效(可能使用RedrawWindow)。这将导致它被重新粉刷。重新绘制后,WM_CTLCOLORSTATIC将再次调用您的处理程序。

于 2013-01-31T16:46:05.023 回答
0

几点建议:

  • 您是否知道接收的是父对话框WM_CTLCOLORSTATIC,而不是控件本身?

  • 看起来很奇怪——return (BOOL)...这段代码存在于哪个函数中?你应该从你的窗口过程中返回一个 LRESULT。

  • 您每次都在泄漏刷子-您应该维护一个刷子并每次都返回该刷子。Windows 不会清理画笔。

于 2013-01-31T16:46:21.453 回答