複数のポップアップメニューを操作するには


Dark  2009-08-15 22:52:05  No: 70797

ポップアップメニューから更にTPM_RECURSEで複数のポップアップメニューを表示しています
TPM_RECURSEされたポップアップメニューのIDはWM_MENUSELECTで常に保持していますが

TPM_RECURSEで表示したポップアップメニューが閉じられるとき
選択して閉じたか、関係無い所をクリックされたかが分かりません
WM_MENUSELECTでHIWORD(wp) == 0xFFFFでメニューが閉じたことになりますが
LOWORD(wp)にはメニューIDが無いため、このような事になっています

TPM_RECURSEのポップアップメニューを選択して閉じたか
選択せずに閉じられたかを調べる為にいい方法は無いでしょうか?


aetos  2009-08-17 22:27:59  No: 70798

TrackPopupMenu に TPM_RETURNCMD を渡すことで、メニューが選択されるかキャンセルされるまで、この関数が制御を返さないようにすることができます。
これなら、メニューをキャンセルしたことは WM_MENUSELECT ではなく、この関数が 0 を返したことで検知でき、それがどのメニューなのかは TrackPoupMenu を呼ぶ前にわかっているはずです。

ただし、TPM_RETURNCMD を指定すると、TPM_NONOTIFY を指定しなくても WM_COMMAND が飛んでこなくなってしまうようなので、ちょっと大改造になりかねませんね。


aetos  2009-08-17 22:35:42  No: 70799

マチガイ。

> メニューが選択されるかキャンセルされるまで、この関数が制御を返さないようにすることができます。

と思いこんでいましたが、TPM_RETURNCMD を指定しなくても、メニューが閉じるまで制御は戻らないみたいですね。

あと、WM_UNINITMENUPOPUP で、メニューが閉じたときにそのハンドルを取れるっぽいです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加