ポップアップメニューを実装するにはWM_CONTEXTMENU をハンドルするのが一般的
CMenu menu; VERIFY(menu.LoadMenu(IDR_POPUPMENU)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, x, y, this); PostMessage(WM_NULL, 0L, 0L); //おまじないらしい
注意点として TrackPopupMenu()の第1引数は TPM_RIGHTBUTTON を使う。
TPM_LEFTBUTTON ではメニュー外を右クリックしたときポップアップメニュー
が消えない。(ヘルプの書いてあることと違うけど)
また、CTreeView(TreeCtrl)などは WM_CONTEXTMENUがこないのでNM_RCLICK でハンドルする