ポップアップメニューから更にTPM_RECURSEで複数のポップアップメニューを表示しています
TPM_RECURSEされたポップアップメニューのIDはWM_MENUSELECTで常に保持していますが
TPM_RECURSEで表示したポップアップメニューが閉じられるとき
選択して閉じたか、関係無い所をクリックされたかが分かりません
WM_MENUSELECTでHIWORD(wp) == 0xFFFFでメニューが閉じたことになりますが
LOWORD(wp)にはメニューIDが無いため、このような事になっています
TPM_RECURSEのポップアップメニューを選択して閉じたか
選択せずに閉じられたかを調べる為にいい方法は無いでしょうか?
TrackPopupMenu に TPM_RETURNCMD を渡すことで、メニューが選択されるかキャンセルされるまで、この関数が制御を返さないようにすることができます。
これなら、メニューをキャンセルしたことは WM_MENUSELECT ではなく、この関数が 0 を返したことで検知でき、それがどのメニューなのかは TrackPoupMenu を呼ぶ前にわかっているはずです。
ただし、TPM_RETURNCMD を指定すると、TPM_NONOTIFY を指定しなくても WM_COMMAND が飛んでこなくなってしまうようなので、ちょっと大改造になりかねませんね。
マチガイ。
> メニューが選択されるかキャンセルされるまで、この関数が制御を返さないようにすることができます。
と思いこんでいましたが、TPM_RETURNCMD を指定しなくても、メニューが閉じるまで制御は戻らないみたいですね。
あと、WM_UNINITMENUPOPUP で、メニューが閉じたときにそのハンドルを取れるっぽいです。