2

ウィンドウに黒い静的テキストがあり、実行時にカラー チューザー ダイアログを使用して変更したいと考えています。色を取得できたので、あとはテキストを変更するだけです! メッセージは処理するものであると読みましたがWM_CTLCOLORSTATIC、これはコントロールが最初に画面に描画されたときのみのようです。使えWM_PAINTますか?

私がこれまでに持っている色を設定するためのコードは(念のためWM_CTLCOLORSTATIC):

if ((HWND)lParam == GetDlgItem(hWnd, uLabelId)
{
    SetBkMode((HDC)wParam, TRANSPARENT);
    SetTextColor((HDC)wParam, crLabelTextColour);
    return (BOOL)CreateSolidBrush(GetSysColor(COLOR_MENU));
}

この問題にアプローチするスティックの端が完全に間違っている可能性があるため、どんな支援も大歓迎です!

4

2 に答える 2

5

あなたは正しい軌道に乗っていWM_CTLCOLORSTATICます。色を変更したい場合は、コントロールを無効にします (おそらく を使用してRedrawWindow)。再塗装の原因になります。再描画されると、WM_CTLCOLORSTATICハンドラーが再度呼び出されます。

于 2013-01-31T16:46:05.023 に答える
0

いくつかの提案:

  • WM_CTLCOLORSTATICコントロール自体ではなく、を受け取るのは親ダイアログであることを認識していますか?

  • 奇妙に見えます-このreturn (BOOL)...コードはどの関数に住んでいますか? ウィンドウ プロシージャから LRESULT を返す必要があります。

  • 毎回ブラシをリークしています - 単一のブラシを維持し、毎回そのブラシを返す必要があります。Windows はブラシをクリーンアップしません。

于 2013-01-31T16:46:21.453 に答える