マウス右クリックでのポップアップメニュー(VC++MFC) Windowのクライアント領域を右クリックすると、ポップアップメニューを表示する方法についてのメモです。 1.リソースエディターで、ポップアップ用のメニューを作成します。 2.マウス右クリックのメッセージ(ON_WM_RBUTTONDOWN)ハンドルで、ポップアップメニューを出す処理を実装します。 void CPopMenuTestView::OnRButtonDown(UINT nFlags, CPoint point) { CMenu Menu; CPoint pt = point; ClientToScreen(&pt); if (Menu.LoadMenu(IDR_MENU_POPTEST)) { CMenu* pSubMenu = Menu.GetSubMenu(0); if (pSubMenu != NULL) { pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this); } } CView::OnRButtonDown(nFlags, point); } 3.MFCを利用する場合は、WM_CONTEXTMENUのメッセージハンドルを実装すれば一般的で便利です。 void CPopMenuTestView::OnContextMenu(CWnd* pWnd, CPoint point) { CMenu Menu; CPoint pt = point; //ClientToScreen(&pt); if (Menu.LoadMenu(IDR_MENU_POPTEST)) { CMenu* pSubMenu = Menu.GetSubMenu(0); if (pSubMenu != NULL) { pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this); } } } 4.注意点。ON_WM_RBUTTONDOWNのメッセージハンドルで実装する時に、ポップアップする場所の座標を自分でグローバルに変換しなければなりません。MFCのOnContextMenu()をオーバライドして実装すれば、座標の変換は既に行ったのです。 |