メニュー表示中の判定

[戻る]
亀山 2007/02/02(金) 16:25:00
VC6 MFCで、メニュー(コンテキストメニューも)が表示されていることを
任意のタイミングで知ることは可能でしょうか?

タイマーを使い、そのコールバックの中で
「フォーカスを持っているときだけ定期的に画面更新」処理をしているのですが、
メニュー表示中もGetFocusの情報はウィンドウ自身のままになっています。
(MouseMoveなどのメッセージは来ません)

タイマー処理の中で、メニューが表示されていたら今回はパス
という判定を入れればよいかなと思っています。
よろしくお願いいたします。

Kerry 2007/02/02(金) 17:31:05
CWinApp::ProcessMessageFilter()関数をオーバーライドすれば、
メニューの表示中に投げられるメッセージを捕まえることができますので、
メニューの表示/非表示のタイミングが検出できるかもしれません。

亀山 2007/02/02(金) 20:01:42
[[解決]]
メニュー表示関係のメッセージについて調べてみたところ、
WM_ENTERMENULOOPとWM_EXITMENULOOPというメッセージがありました。

これらのメッセージはCWinApp::ProcessMessageFilter()には来ないようですが、
メインウィンドウにWM_ENTERMENULOOPとWM_EXITMENULOOPのハンドラを作成し、
その中でフラグを更新し、タイマー処理内ではこのフラグを参照することにより、
目的の動作を実現することができました。
ありがとうございます。

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