2013-04-11 110 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