MFC添加右键菜单

学习MFC刚开始,第一件事就是学习右键菜单


右键弹出菜单 
 
为什么想写右键菜单,其实MFC右键菜单并不难,但是比较恶心。在一次做项目的过程中使用了OnRButtonUp这个事件来触发右键菜单,可是有一次我查看了一下内存,我狂点右键之后,内存在不断增加,而且不是说增加几次之后就不增加了,一直增加。这种现象可能在学习的时候表现的不明显(具体明显的原因还不太清楚,可能跟程序大小有关,也可能跟界面刷新频率有关,也不排除跟我选择的是基于对话框而非给予文档的有关),但是程序做大之后可能会比较明显。当时为了解决这个问题费了很多脑筋,浪费了两天的宝贵时间,又是查msdn又是上网查,总是找不到解决办法。后来看到一个帖子用OnContextMenu这个事件来触发右键菜单,我抱着试试看的心理来用,结果发现用了这个事件之后真的是腰不酸了,腿不疼了,内存也不增长了。既然都说到这了,那就把具体的步骤写一下吧。 
本文适合人群:初学者,使用OnRButtonUp事件有内存问题的人。


正文:例子

1.建立一个基于对话框的的MFC程序。

2.Insert->Resource->Menu。

3.可以给menu改一个id,也可以不改。

4.把菜单搞成这样的(搞成别的样的也可以)。

5.在对话框对应的类上点右键->Add WindowsMessage Handler->WM_CONTEXTMENU->编辑之。

6.修改OnContextMenu函数


{CSDN:COED:27}

voidCRButtonMenuDlg::OnContextMenu(CWnd* pWnd, CPoint point)

{

       // TODO: Add your message handler codehere

       CMenu popMenu;

       popMenu.LoadMenu(IDR_RBTN_MENU);         //载入菜单

       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);                //显示弹出菜单,参数依次为(鼠标在菜单左边|跟踪右键,xythis)

       pPopup->Detach();

       popMenu.DestroyMenu();

}


{CSDN:COED:28}

 

注意:在OnContextMenu这个事件函数中不需要使用ClientToScreen(&point);这个函数来转换坐标,因为它自动就转了,你再给它转又歪了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值