ダイアログの色の変更

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
jacoby
記事: 106
登録日時: 2006年6月02日(金) 18:20

ダイアログの色の変更

#1 投稿記事 by jacoby »

ダイアログのクライアント領域の色を変更したいのですが
どうもWM_CTLCOLORDLGメッセージが捕まえられません。

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

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

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

 お知りの方がおられましたら教えてください。
(AB ver4.24 /WinMe)
たかせ
記事: 215
登録日時: 2006年2月05日(日) 17:10
お住まい: 東京都

ダイアログの色の変更

#2 投稿記事 by たかせ »

WM_CTLCOLORDLGメッセージではなくWM_INITDIALOGメッセージでキャッチするかもしくはCREATEイベント内でダイアログの色の変更機能を実装してみてください。

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

ありがとうございます。

#3 投稿記事 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イベントで自力で描画するというのも手かも知れませんが。)

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