右键弹出菜单,网上搜的代码中一直搞不明白的是菜单的ID,后来知道是菜单名就是ID。
先建一个resource菜单,编辑好菜单之后,找到对话框属性页的message,添加WM_CONTEXTNENU,
在对应生成的函数中添加代码即可,代码网上都有= =
void C胃镜导航GUIDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
CRect rect;
GetDlgItem(IDC_BIOPSYSHOW_LIST)->GetWindowRect(&rect);
if (rect.PtInRect(point))
{
//CMenu popMenu;
//popMenu.LoadMenu(IDR_MENU1); //载入菜单
//CMenu *pPopup;
//pPopup=popMenu.GetSubMenu(0); //获得子菜单指针
pPopup->EnableMenuItem(ID_1,MF_BYCOMMAND|MF_ENABLED); //允许菜单项使用
pPopup->EnableMenuItem(ID_2,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED); //不允许菜单项使用
ClientToScreen(&point); //将客户区坐标转换成屏幕坐标
//pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this); //显示弹出菜单,参数依次为(鼠标在菜单左边|跟踪右键,x,y,this)
//pPopup->Detach();
//popMenu.DestroyMenu();
CMenu menu;
VERIFY(menu.LoadMenu(IDR_MENU1));
CMenu* pPopup=menu.GetSubMenu(0);
ASSERT(pPopup!=NULL);
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,point.x,point.y,this); //在鼠标当前位置显示指定菜单
}
}
这种方法可以实现在指定控件区域弹出菜单