はじめまして、いるかと申します。
以下の件、良い対応がわかるかたがおりましたらご教授お願いします。
【環境】
WindwsXPSP3、VC6++SP6、MFC(EXE)、ダイアログベース
【やりたいこと】
あるフラグがONの場合、ボタンコントロールのテキスト色を赤に
OFFの場合は、黒に変化させているプログラムがあります(初期値は黒色)。
通常のダイアログを描画させている時は、特に問題ないのですが、
ダイアログを適当なウィンドウに隠し、再表示させた場合にフラグがONの
場合でも、ボタンコントロールのテキスト色が赤ではなく、
初期値の黒が設定されてしまいます(テキスト内容も初期化されます)。
ダイアログを適当なウィンドウに隠し、再表示させた場合にフラグがONの
場合、ボタンコントロールのテキスト色に赤が設定されるように
したいと考えています(テキスト内容も残す)。
以下に現状のプログラムの簡単な流れと原因をします。
できれば、現状のプログラムから余り修正を加えずに実現できたら
よいと考えています。
【現状のプログラムの流れ】
①タイマー関数で処理②以降を実行
②CDCクラスでGetDialogで指定したボタンを参照
③参照したボタンに対してSetTextColorでテキスト色を設定
④TextOutでテキスト内容を設定
④CDCクラス解放
【原因】
・TextOut関数をOnPaint関数以外で実施している。
・TextOut関数で設定したテキスト内容は、描画更新時に残らない
【対策として考えたもの】
×SetWindowTextを使用する。
(テキストの色が変えられない)
×TextOut関数をOnPaintに移動し、SetBkModeで背景を透過させる。
(見た目上の変化なし)
△ボタンをオーナードローして、専用の処理を入れる。
(実現できるかは調査中)
以上です。
あるDLGのメンバーコントロールのテキスト色を変えたい場合は
当該のDLGがWM_CTLCOLOR〜系メッセージに応答する方法が一般的です。
本件の場合ボタンなのでWM_CTLCOLORBTN メッセージですね。
http://support.microsoft.com/kb/130952/eu-us
より
WM_CTLCOLORBTN
Sent By: command buttons (regular and default)
Changes made during this message have no effect on command buttons. Command buttons always use system colors for drawing themselves.
だそうです。
おおっ、すみません、そうでしたね。
そうなると、オーナードロー(BS_OWNERDRAW)を
選択せざるを得ませんね。
Themeを使用しているのなら
CUSTOMDRAWでもできそうです。
仲澤@失業者さん、ryoさん、ロマさん
ご教授ありがとうございます。
カスタムドロー、オーナードローの
両方向から実現させてみます。
遅くなりまして、すいません。
オーナードローで解決できました。
皆様ありがとうございました。