ページ 11

ダイアログの色の変更

Posted: 2012年2月05日(日) 07:28
by jacoby
ダイアログのクライアント領域の色を変更したいのですが
どうもWM_CTLCOLORDLGメッセージが捕まえられません。

メインのウインドウにボタンが一つあって、
そのボタンを押すとダイアログボックス(モーダル)が
立ち上がるような簡単なプロジェクトを書いてみてテストしてみました。

以下プロジェクト・コード全文です。(ウインドウは「MainWnd」と「ModalWnd」のみ)  試しにモーダルダイアログ上にスタティックテキストを一枚貼り付け、同様のメッセージである
"WM_CTLCOLORSTATIC"が飛んでくるかテストしてみたのですが、これについては取得出来ました。
ところがWM_CTLCOLORDLGについてはそもそも飛んで来てないのか「Print "WM_CTLCOLORDLG"」が実行されないようです。

 WM_CTLCOLORDLGはABのフォルダ内\Include\api-msg.sbpにて定義されています。
使えるハズだとも思うのですが。

 お知りの方がおられましたら教えてください。
(AB ver4.24 /WinMe)

ダイアログの色の変更

Posted: 2012年2月06日(月) 19:24
by たかせ
WM_CTLCOLORDLGメッセージではなくWM_INITDIALOGメッセージでキャッチするかもしくはCREATEイベント内でダイアログの色の変更機能を実装してみてください。

ABのIDEのRADでコーディングした場合はダイアログボックス(この場合:モーダル)作成はCallback.wbpを見ればわかりますが、WM_INITDIALOGメッセージをキャッチした時に行われます。なのでおそらくWM_CTLCOLORDLGイベントは発生しないと思います。
ご確認よろしくお願いします。

ありがとうございます。

Posted: 2012年2月08日(水) 00:08
by jacoby
ABのIDEのRADでコーディングした場合はダイアログボックス(この場合:モーダル)作成はCallback.wbpを見ればわかりますが、WM_INITDIALOGメッセージをキャッチした時に行われます。なのでおそらくWM_CTLCOLORDLGイベントは発生しないと思います。
そうなんですか。WM_CTLCOLORDLGが発生しないなら、いくら待っていても駄目ですね。
ただダイアログの色の変更処理はWM_CTLCOLORDLGイベントの「戻り値」に設定する色のブラシハンドルをセットするというような仕様になっていたと思うので、これをINITDIALOGイベントでどのように実装出来るのかはまだ自分では確認出来ていません。
http://www.serpress.co.jp/cpp/no013.html
いずれにしてもこの方法そのまま、というのは少し難しそうな感じがしますね。(PAINTイベントで自力で描画するというのも手かも知れませんが。)

たかせさん、返信有難うございました。また何かありましたらよろしくお願いします。