2013-04-11 11 views
5

Mam statyczną kontrolę:statyczna kontrola koloru ustawić tekst

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

Chcę po naciśnięciu przycisku kolor tekstu w statycznym etykiecie, aby zmienić na czerwony na przykład.

Jak mogę to zrobić?

wiem, że to

SetTextColor(
    _In_ HDC hdc, 
    _In_ COLORREF crColor 
); 

funkcja, ale nie mogę dowiedzieć się, jak dostać HDC kontroli statycznej.

Z góry dziękuję.

EDIT:

To nie działa:

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

Kontekst urządzenia jest ogólnie przekazywany w kontekście obsługi komunikatu 'WM_PAINT'. – Chad

+0

Po udzieleniu odpowiedzi zdałem sobie sprawę, że jest to duplikat: http://stackoverflow.com/questions/14630760/in-win32-how-can-the-colour-static-text-be-changed/14630860#14630860 –

Odpowiedz

5

Statyczne kontrole wysłać rodzica wiadomość WM_CTLCOLORSTATIC tuż przed ich malować siebie. Możesz zmienić DC, posługując się tym komunikatem.

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 

Sztuczka polega na tym, że kontrola statyczna zostanie odświeżona po kliknięciu przycisku. Możesz to zrobić na kilka różnych sposobów, ale najprostszym jest prawdopodobnie unieważnienie okna za pomocą InvalidateRect.

+0

przepraszam, sugerujesz, aby umieścić kod zmiany koloru tutaj, więc gdzie procedura zmiany koloru jest nazywana ????? – mikmak

+0

Wyświetlony przeze mnie fragment kodu przejdzie do procedury nadrzędnej kontrolki statycznej. Jeśli używasz frameworku takiego jak MFC lub WTL, który implementuje procedurę okna rodzica dla ciebie, będziesz musiał użyć dowolnego mechanizmu, jaki zapewnia framework, aby obejść domyślny moduł obsługi dla tej wiadomości. –