- 締切済み
親ウィンドウのメッセージを子ウィンドウで処理する
親ウィンドウに入ってくるメッセージを子ウィンドウ(ダイアログ)のメッセージマップで処理したいと思ってますが、どうにもできません。なにかよい方法はないでしょうか? 処理したいメッセージはESCが押されたかどうかだけなので、親で受けたメッセージを子供にSendMessageすればよいのですが、できれば、親で受けたメッセージすべてを子供にそのまま渡すというようなことができたらうれしいです。 ATL/WTLでの書き方だともっとうれしいです。 どうぞよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hello_world
- ベストアンサー率46% (15/32)
親ウィンドウを弄らずに子ウィンドウでメッセージを取りたいならばHookと言う手があります。ご存知かもしれませんが、プログラムのみならずOS自体にも致命的なダメージを与えかねないので注意して使用してください。 #メモリ確保などを子ウィンドウが行っていたとしても、終了の命令は(拡張時に他のウィンドウなども管理する観点から)明示的に親ウィンドウから行われるべきだと思います。メモリ開放などはそれを受けた子ウィンドウが行い、完了した旨を親ウィンドウに通知してプログラムが終了するのが通例でしょう。ただ、コメントから親ウィンドウを弄らないと言う記述があるので特殊なケースを狙ったものかもしれませんが…
- hello_world
- ベストアンサー率46% (15/32)
ATL/WTLしか書かれていないので、他環境が良く判りませんが、親のWindowProc()から任意の関数にそのままメッセージを投げるのは試されましたか?
補足
理想を言うと、親ウィンドウのメッセージマップにハンドラは書かずに、子供の方にハンドラを書いて(すでに書いてある)処理したいと思っています。 詳しく書くと、実行中は親ウィンドウの方がアクティブになっています。(表示のためだけ)表示のための計算やメモリの確保などの処理は子供のダイアログの方で行ってますので、終了コードは子供に書かれています。しかし親ウィンドウがアクティブになっているので、子供の方で処理ができません。そこで、親から子供にメッセージを出して終了させたいと考えました。 環境は、 VC2003でWTLは7.5を使っています。 基本的に考え方がおかしいとか、気がつく点があったらアドバイスをおねがしいます。
お礼
MESSAGE_RANGE_HANDLER で、複数のメッセージをハンドルできましたのである程度解決しました。 アドバイスありがとうございます。