ウィンドウが送信したメッセージをキャッチする – プログラミング – Home

ウィンドウが送信したメッセージをキャッ...
 
通知
すべてクリア

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


スイカ
 スイカ
(@スイカ)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

プチ初心者のスイカです。

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

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

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


引用未解決
トピックタグ
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

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


返信引用
スイカ
 スイカ
(@スイカ)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

woodさん、回答ありがとうございます。

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

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

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


返信引用
山本八郎
 山本八郎
(@山本八郎)
ゲスト
結合: 23年前
投稿: 24
 

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


返信引用
スイカ
 スイカ
(@スイカ)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

山本八郎さん、どうもありがとうございます。

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

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

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

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


返信引用
山本八郎
 山本八郎
(@山本八郎)
ゲスト
結合: 23年前
投稿: 24
 

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


返信引用
スイカ
 スイカ
(@スイカ)
ゲスト
結合: 23年前
投稿: 8
Topic starter  

山本八郎さん、ご回答ありがとうございました。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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