複数の子ウィンドウに同じ処理を行うには? – プログラミング – Home

複数の子ウィンドウに同じ処理を行うには...
 
通知
すべてクリア

複数の子ウィンドウに同じ処理を行うには?


シルクハット
 シルクハット
(@シルクハット)
ゲスト
結合: 24年前
投稿: 23
Topic starter  

第:複数の子ウィンドウに同じ処理を行うには?

MDIで,子ウィンドウが複数出ている状態で,それらのウィンドウすべてに
同じ処理をさせたい場合(例えば,背景色をすべて同じにしたい)の簡単な方法は有るでしょうか?
たとえば,SendMessageToDescendants() なんかは,
一度に処理命令をウィンドウに送ることなどができるのでしょうか?
もしくは,ポインタなどを取得して,一つ一つ処理していくしかないのでしょうか?
お願いします.


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

仰る「処理命令」というのが具合的に何なのかよくわかりませんが、
SendMessageToDescendants()が送れるのは、あくまでメッセージです。
子ウィンドウの背景色を変えたいのであるなら、親と位置付けられるウィンドウが
子ウィンドウに対して任意のメッセージを送り、
それを受け取った子ウィンドウが自身の背景色を変える、という手段を取るべきではないでしょうか??

状況にもよりますが、親が直々に子を操作することはあまりしない方がいいと思います。


返信引用
ku
 ku
(@ku)
ゲスト
結合: 25年前
投稿: 312
 

これは背景色を全て同じにしたいでいいの?
処理の実装の仕方によりいろいろだと思うよ

たとえば、メモリDCからWM_PAINTでBitBltしている場合
新しい背景色を考慮してメモリDCを作り直して自分自身にInvalidateRectを呼ぶような
WM_USER+???を作り、対象の全てのウィンドウにWM_USER+???をSendするような
仕組みにするのではないかと思います

WM_ERASEBKGNDに処理させるなら
新しい背景色を考慮してブラシをアプリで1つ作り
Viewのウィンドウクラスに対して作成したブラシで置き換え(SetClassLong/GCL_HBRBACKGROUND)
対象のウィンドウ(全てのViewでしょう)にInvalidateRectを発行すれば良いのではないかと思います

WM_ERASEBKGNDを実装している場合は何らかの変数に背景用のブラシを保持して
FillRectなんかをしているのではないかと思うので
ブラシを作成して背景用のブラシを保持している所
(ポインタで見ているなら一カ所/メンバ変数なら全てのViewでしょう)に設定し
対象のウィンドウ(全てのViewでしょう)にInvalidateRectを発行すれば良いのではないかと思います

他にも方法はあるので、もっと良く考えた方が良いかも
実装の仕方や実際に何をやりたいかによって変わると思います
ちなみに、SendMessageToDescendantsは使ったことが無いし
上記の方法は確認してないので正しいかどうかは不明です(^^;


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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