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));
4

1 回答 1

7

静态控件WM_CTLCOLORSTATIC在绘制自己之前向其父级发送消息。您可以通过处理此消息来更改 DC。

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

于 2013-04-11T19:56:30.700 回答