2013-04-11 68 views
5

我有一个静态控制:静态控制设置文本颜色

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)); 
+0

设备上下文通常在处理WM_PAINT消息的上下文中给你。 – Chad 2013-04-11 19:34:47

+0

回答后,我意识到这是一个重复的:http://stackoverflow.com/questions/14630760/in-win32-how-can-the-colour-of-static-text-be-changed/14630860#14630860 – 2013-04-12 16:28:54

回答

5

静态控制他们画自己之前发送它们的父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使窗口无效。

+0

对不起,你建议在这里放置颜色改变代码,所以在改变颜色程序的地方叫做????? – mikmak 2015-10-03 13:28:28

+0

我展示的代码会在静态控件的父窗口过程中进行。如果您正在使用像(MFC或WTL)这样的框架为您实现父窗口过程,则必须使用框架提供的任何机制来绕过该消息的默认处理程序。 – 2015-10-03 13:52:16