ウィンドウが送信したメッセージをキャッチする

[戻る]
スイカ 2002/07/25(木) 03:12:56
プチ初心者のスイカです。

ユーザのマウス操作によってメニュー選択すると、あるウィンドウ
からメッセージ「WM_COMMAND」が自動的に送信されます。
その「WM_COMMAND」を捕まえて処理をしたいのですが
ポストではなくて、送信したメッセージを捕らえる方法はありますか?

メッセージループを操作できたらいいのかなぁ...
なんて、思うのですが、これは勘違いでしょうか?

どうぞ、アドバイスよろしくお願いします。

wood 2002/07/25(木) 12:45:26
メッセージドリブンの考え方を勉強してはどうですか
特定のウィンドウに発行されているはずなのでどのウィンドウハンドルに発行されているか
特定できていますか
不特定多数だと無理だと思いますけど

スイカ 2002/07/25(木) 13:16:07
woodさん、回答ありがとうございます。

>特定のウィンドウに発行されているはずなのでどのウィンドウハンドルに発行され
>ているか特定できていますか

できていません。
あるビュー上で右クリックでメニューを出し、その中から項目を選択すると
「WM_COMMAND」が送信されることが、Spy++で確認できています。
その、「WM_COMMAND」がどのウィンドウにポストされるのかがわかると
解決できそうなのですが。。。

どうぞよろしくお願いします。

山本八郎 2002/07/25(木) 15:03:50
SensMessageもPostMessageも受ける方のプログラムは同じです。
メニューよりのコマンドメッセージは特定のウインドウに送られるのではなく、複数のウインド
ウに順にルーティングされます。処理したいウインドウが標準のルーティングに含まれない場合
は、ルーティングを変える必要があります。

スイカ 2002/07/25(木) 19:32:31
山本八郎さん、どうもありがとうございます。

とりあえず、処理したい「WM_COMMAND」メッセージの捕まえるために
CFrameWndを継承しているCMainFrameクラスのOnCmdMsgeをオーバーライドして
その中で、以下の条件が満たされたら、ブレークするようにしてみましたが
いっこうに、きません。

・nID:お目当てのID
・nCode:CN_COMMAND

いったい、SendMessageされたメッセージはどこへ消えていまったのでしょうか?
このまま迷宮入りになってしまうのかなぁ...

どうぞ、よろしくお願いします。

山本八郎 2002/07/26(金) 11:34:55
ヘルプの「コマンドの振り分け (ルーティング)」を参照してください。
アクティブなウインドウの種類によっては、フレームにルーティングされない場合もあります。

スイカ 2002/07/27(土) 03:12:49
[[解決]]
山本八郎さん、ご回答ありがとうございました。

ヘルプを参考にして、メッセージを受信していると思われる
クラスにOnCommandを実装して、ブレイクを設置したら
見事に拾うことができました。
ずっとずぅ〜っと悩んでいたので、喜びが大きいです。
どうもありがとうございました。

古いスレッドには追加発言できません。