MFC 创建ContextMenu

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

menuItem1      menuItem2        menuItem3

--subItem1A      --subItem2A       --subItem3A

--subItem1B      --subItem2B       --subItem3B

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

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

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

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

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

如此例弹出:|subItem2A|

                  |subItem2B|

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

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

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

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

即弹出:|subItem2A||subItem2B|


不知道为什么我创建第二种的时候就是不显示,有尝试成功的大神贴一下代码!O(∩_∩)O谢谢






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值