静态控件设置文本颜色

7

我有一个静态控件:

HWND hLabelControl=CreateWindowEx(WS_EX_CLIENTEDGE,"STATIC","",
            WS_TABSTOP|WS_VISIBLE|WS_CHILD|SS_CENTER,0,0,24,24,
        hwnd,(HMENU)hS1,GetModuleHandle(NULL),NULL);

当按下按钮后,我希望静态标签中的文本颜色改变为红色。

我该怎么做呢?

我知道有一个

SetTextColor(
  _In_  HDC hdc,
  _In_  COLORREF crColor
);

我知道如何使用函数,但我无法弄清楚如何获取静态控件的HDC。

提前感谢。

编辑:

这种方法不起作用:

        HDC hDC=GetDC(hLabelControl);
        SetTextColor(hDC,RGB(255,0,0));

设备上下文通常在处理“WM_PAINT”消息的上下文中提供给您。 - Chad
回答之后,我意识到这是一个重复的问题:http://stackoverflow.com/questions/14630760/in-win32-how-can-the-colour-of-static-text-be-changed/14630860#14630860 - Adrian McCarthy
1个回答

7

静态控件在绘制自身之前向其父窗口发送一个 WM_CTLCOLORSTATIC 消息。您可以通过处理此消息来更改设备上下文。

case WM_CTLCOLORSTATIC:
  if (the_button_was_clicked) {
    HDC hdc = reinterpret_cast<HDC>(wParam);
    SetTextColor(hdc, COLORREF(0xFF, 0x00, 0x00));
  }
  return ::GetSysColorBrush(COLOR_WINDOW);  // example color, adjust for your circumstance

因此,诀窍在于在单击按钮时使静态控件重新绘制自身。您可以通过几种不同的方式来实现这个目标,但最简单的方法可能是使用InvalidateRect无效化窗口。


抱歉,您建议在这里放置颜色更改代码,那么更改颜色的过程在哪里调用??? - bouqbouq
我展示的代码片段应该放在静态控件的父窗口过程中。如果您正在使用像(MFC或WTL)这样实现父窗口过程的框架,您将不得不使用框架提供的任何机制来绕过该消息的默认处理程序。 - Adrian McCarthy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接