您的位置:首页 > 其它

如何创建右键弹出菜单(即ContextMenu)

2010-05-08 21:32 423 查看
在Visual studio 2005环境中,在“资源视图”新建一个“Menu”资源ID为IDR_CONTEXTMENU,然后编辑你的菜单资源,假如设计的菜单栏结构如下:

menuItem1 menuItem2 menuItem3

--subItem1A --subItem2A --subItem3A

--subItem1B --subItem2B --subItem3B

我需要获取menuItem2的PopupMenu(即子菜单)作为ContextMenu,则应该怎么做呢?

接下来本人讲述两种创建右键弹出菜单的方法:

一、创建一个“鼠标右键按下”的系统消息WM_RBUTTONDOWN,在其消息处理函数中添加如下代码:

void CMyDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
CMenu *pContextMenu,* pSubMenu;
CRect rect;
this->GetWindowRect(&rect);
pContextMenu=new CMenu();//一定要动态申请空间,不然就会在LoadMenu时出现错误
pContextMenu->LoadMenu(IDR_CONTEXTMENU);
pSubMenu=pContextMenu->GetSubMenu(1);
pSubMenu->TrackPopupMenu(TPM_RIGHTBUTTON|TPM_LEFTALIGN,point.x+rect.left,point.y+rect.top,this);

}


在存在“系统菜单栏”的对话框应用程序中,建议用这一个方法,因为此时你可以在对话框Client区右键则弹出自定义的ContextMenu

如此例弹出:|subItem2A|

|subItem2B|

而在标题栏处右键则会弹出“系统菜单栏”。

二、创建一个"ContextMenu"的系统消息“WM_CONTEXTMENU”,在其消息处理函数中添加如下代码:

void CMyDlg::OnContextMenu(CWnd *pWnd, CPoint point)
{
CMenu *pContextMenu,* pSubMenu;
pContextMenu=new CMenu();//一定要动态申请空间,不然就会在LoadMenu时出现错误
pContextMenu->LoadMenu(IDR_CONTEXTMENU);
pSubMenu=pContextMenu->GetSubMenu(1);
pSubMenu->TrackPopupMenu(TPM_RIGHTBUTTON|TPM_LEFTALIGN,point.x,point.y,this);

}


此方法则会屏蔽掉自带的标题栏上右键触发的“系统菜单栏”,即在标题栏上右键弹出的菜单栏也是自定义的ContextMenu即弹出:|subItem2A|

|subItem2B|
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: