2013-04-11 10 views
5

Ich habe eine statische Kontrolle:Statische Steuerung gesetzt Textfarbe

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

Ich möchte, wenn eine Taste, um die Farbe des Textes im statischen Etikett gedrückt wird zum Beispiel auf Rot zu ändern.

Wie kann ich das tun?

Ich weiß, dass es eine

SetTextColor(
    _In_ HDC hdc, 
    _In_ COLORREF crColor 
); 

Funktion ist, aber ich kann nicht herausfinden, wie die HDC der statischen Kontrolle zu bekommen.

Vielen Dank im Voraus.

EDIT:

Das funktioniert nicht:

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

Der Gerätekontext wird Ihnen normalerweise im Zusammenhang mit der Behandlung der 'WM_PAINT' Nachricht gegeben. – Chad

+0

Nach der Antwort erkannte ich, dass dies ein Duplikat ist: http://stackoverflow.com/questions/14630760/in-win32-how-can-the-colour-of-static-text-be-changed/14630860#14630860 –

Antwort

5

Statische Kontrollen schicken ihre Eltern eine WM_CTLCOLORSTATIC Nachricht, kurz bevor sie sich malen. Sie können den DC ändern, indem Sie diese Nachricht bearbeiten.

Der Trick ist also, das statische Steuerelement neu zu zeichnen, wenn die Schaltfläche geklickt wird. Sie können dies auf verschiedene Arten tun, aber das einfachste ist wahrscheinlich, das Fenster mit InvalidateRect ungültig zu machen.

+0

Entschuldigung, Sie schlagen vor, Farbe ändern Code hier, so wo die Änderung Farbe Verfahren heißt ????? – mikmak

+0

Der Codeausschnitt, den ich zeigte, würde in die Fensterprozedur des übergeordneten Elements der statischen Kontrolle gehen. Wenn Sie ein Framework wie (MFC oder WTL) verwenden, das die Fensterprozedur des übergeordneten Fensters für Sie implementiert, müssen Sie den vom Framework bereitgestellten Mechanismus verwenden, um den Standardhandler für diese Nachricht zu umgehen. –