菜单ID宏定义如下:
#define WM_RMENU_HUMAN WM_USER + 0x010
#define WM_RMENU_PLANT WM_USER + 0x011
#define WM_RMENU_CAT WM_USER + 0x012
#define WM_RMENU_DOG WM_USER + 0x013
#define WM_RMENU_ELEPHANT WM_USER + 0x014
添加右键菜单响应消息:
afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/);
添加点击菜单响应消息函数:
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
主要代码如下所示:
void CMenuTest2View::OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/)
{
CMenu subMenu;
//subMenu.LoadMenu(IDR_MAINFRAME);
subMenu.CreatePopupMenu();
subMenu.AppendMenu(MF_STRING, WM_RMENU_CAT, _T("猫"));
subMenu.AppendMenu(MF_STRING, WM_RMENU_DOG, _T("狗"));
subMenu.AppendMenu(MF_STRING, WM_RMENU_ELEPHANT, _T("大象"));
CMenu mainMenu;
mainMenu.CreatePopupMenu(); //动态创建弹出式菜单对象
mainMenu.AppendMenu(MF_STRING, WM_RMENU_HUMAN, _T("人类"));
mainMenu.AppendMenu(MF_SEPARATOR); //添加分割线
mainMenu.AppendMenu(MF_STRING, WM_RMENU_PLANT, _T("植物"));
mainMenu.AppendMenu(MF_SEPARATOR); //添加分割线
mainMenu.InsertMenu(mainMenu.GetMenuItemCount(), MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT)subMenu.m_hMenu, _T("动物")); //添加子菜单
CPoint pt;
GetCursorPos(&pt);
mainMenu.TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
mainMenu.DestroyMenu();
subMenu.DestroyMenu();
}
BOOL CMenuTest2View::OnCommand(WPARAM wParam, LPARAM lParam)
{
switch (LOWORD(wParam))
{
case WM_RMENU_HUMAN:
MessageBox(_T("人类"));
break;
case WM_RMENU_PLANT:
MessageBox(_T("植物"));
break;
case WM_RMENU_CAT:
MessageBox(_T("猫"));
break;
case WM_RMENU_DOG:
MessageBox(_T("狗"));
break;
case WM_RMENU_ELEPHANT:
MessageBox(_T("大象"));
break;
default:
break;
}
return CScrollView::OnCommand(wParam, lParam);
}
运行界面如下: