2013-04-11 18 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を取得する方法を見つけ出すことはできません。

ありがとうございます。

EDIT:

これは動作しません:

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

デバイスコンテキストは、通常、 'WM_PAINT'メッセージを処理するコンテキストで与えられます。 – Chad

+0

回答後、私はこれが重複していることに気付きました:http://stackoverflow.com/questions/14630760/in-win32-how-can-the-colour-of-static-text-be-changed/14630860#14630860 –

答えて

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

+0

私が示したコードは、静的なコントロールの親のウィンドウプロシージャに入ることがわかった。親のウィンドウプロシージャを実装する(MFCまたはWTL)のようなフレームワークを使用している場合は、そのメッセージのデフォルトハンドラをバイパスするためにフレームワークが提供するどのようなメカニズムも使用する必要があります。 –

関連する問題