ある場合におけるコントロールの背景色等を変更したい – プログラミング – Home

ある場合におけるコントロールの背景色等...
 
通知
すべてクリア

ある場合におけるコントロールの背景色等を変更したい


BUGUS
 BUGUS
(@BUGUS)
ゲスト
結合: 24年前
投稿: 1
Topic starter  

はじめまして。VC++3ヶ月目の超初心者SEです。
環境はVC++6.0 Win98 です。

CButton,CStatic,CEditの各派生クラスを作成し、
とあるファイルからデータを読み込んで、
そのデータ通りに、任意のダイアログにあるButton,
Static,EditBox等の背景色やフォントサイズを変更して
DialogをModalさせたときに反映させたいのです。
もちろん、ボタンのID等は、そのデータファイルに書いてあります。

(要は,ダイアログと、各コントロールのデザインのデータを
完全に分離して、このクラスを継承することによって、
データを書き換えることによって自由にカスタマイズしたい という意味です)

また、任意のDialogには、何もソースを書き足してはいけない
という制約があることです。
とはいっても全く書かないと不可能なので
各コントロールは、派生クラスのメンバーにしてやることを可としています。
(IDC_EDIT1 の場合なら、CEditXXX m_edit1;  というふうに。)

そこで質問なのですが、このような場合に各派生クラス(CEdit,CButton等)で
どんな関数を、どのようにオーバーライドしてやれば,
読み込んだデータを反映させられるのでしょうか。
フォント関係は、SetWindowTextあたりだと思うんですが、
コントロールの背景等の色関係は、さっぱりわかりません。

わかりづらい説明で申し訳ないのですが、
何卒宜しくお願いします。


引用解決済
トピックタグ
CdS
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

背景色変更はWM_CTLCOLORをオーバーライドし任意のブラシを返す(ボタンはオーナードローしない
といけないでしょう)。
フォント変更はフォントを作成してSetFontすればいいでしょう。

で、どこでフォントを作り、SetFontすればいいかという話になると思いますが、最初のWM_PAINT
のときにやってやればいいんでしょうかね。
親で操作したらいけないということなので。


返信引用
BAGUS
 BAGUS
(@BAGUS)
ゲスト
結合: 24年前
投稿: 2
 

CdSさん レスありがとうございます。
数日間ネットにつながらない状態だったので、
返事が遅くなって本当に申し訳ありませんでした。

あれから私なりに、思考錯誤してみたのですが、
EditBoxとStaticに関しては何とか成功しました。
ちなみに、SetWindowTextをオーバーライドして、
OnPaintでほぼ処理しました。
ありがとうございました。

しかし、Buttonだけは どうやってもうまくいきません。
というのも、各派生クラスのOnPaintの部分で処理をすると、
DoModalさせるまでに、クラス派生のほうにWM_CTLCOLORのメッセージが来ないからです。
(BreakPointを置いて,OnPaintを置いた場合と置かない場合をチェックした結果です)
ちなみに、OnPaintだけで処理をしようとすると
ボタンを押した後、再描画メッセージがかからず
他のボタンを押すなり何なりをしないと 再描画されませんでしたし、
そもそもボタンっぽく無い描画になります(^^;
(SetBkColorとSetTextColorとFillSolidRectを使った為)

>背景色変更はWM_CTLCOLORをオーバーライドし任意のブラシを返す(ボタンはオーナードローしない
といけないでしょう)。

もしよろしければ、この場合の具体的な方法を
教えていただけないでしょうか?
きっとボタンっぽい描画になるような直感がするので(^^;
何卒宜しくお願いします。


返信引用
CdS
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

>ちなみに、SetWindowTextをオーバーライドして、

がよく分からないですけど。
WM_CTLCOLORの間違い?

カラーボタンについてはcodeguruに載っているので参考にしてください。
http://codeguru.earthweb.com/


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました