2013-04-11 17 views
5

Ho un controllo statico:controllo statico colore del testo set

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

voglio quando un pulsante viene premuto il colore del testo nell'etichetta statica di cambiare al rosso, per esempio.

Come posso fare questo?

So che c'è una funzione

SetTextColor(
    _In_ HDC hdc, 
    _In_ COLORREF crColor 
); 

ma non riesco a capire come ottenere il HDC del controllo statico.

Grazie in anticipo.

EDIT:

Questo non funziona:

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

Il contesto del dispositivo viene generalmente fornito nel contesto della gestione del messaggio 'WM_PAINT'. – Chad

+0

Dopo aver risposto, mi sono reso conto che si tratta di un duplicato: http://stackoverflow.com/questions/14630760/in-win32-how-can-the-colour-of-static-text-be-changed/14630860#14630860 –

risposta

5

controlli statici inviano i loro genitori un messaggio WM_CTLCOLORSTATIC poco prima di dipingere se stessi. È possibile modificare la DC gestendo questo messaggio.

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 

Quindi il trucco è ottenere il controllo statico per ridisegnare se stesso quando si fa clic sul pulsante. Puoi farlo in molti modi diversi, ma il più semplice è probabilmente quello di invalidare la finestra con InvalidateRect.

+0

scusa suggerisci di inserire qui il codice che cambia colore, quindi dove viene chiamata la procedura di cambio colore ????? – mikmak

+0

Il codice snippato che ho mostrato andava nella procedura di finestra del genitore del controllo statico. Se utilizzi un framework come (MFC o WTL) che implementa la procedura della finestra del genitore per te, dovrai utilizzare qualsiasi meccanismo fornito dal framework per ignorare il gestore predefinito per quel messaggio. –

Problemi correlati