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


Dark  2009-08-15 13:52:05  No: 70797  IP: [192.*.*.*]

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

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

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

編集 削除
aetos  2009-08-17 13:27:59  No: 70798  IP: [192.*.*.*]

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

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

編集 削除
aetos  2009-08-17 13:35:42  No: 70799  IP: [192.*.*.*]

マチガイ。

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

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

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

編集 削除