文章目录

  • 一、新建MFC对话框项目
  • 二、添加菜单资源
  • 三、添加右键响应函数
    • 3.1 方法1:WM_CONTEXTMENU响应函数
    • 3.2 方法2:WM_RButtonDown响应函数
  • 四、添加菜单响应函数
  • 五、测试
  • 六、升级版

一、新建MFC对话框项目


二、添加菜单资源

添加一个主菜单和3个子菜单。



三个子菜单的ID分别为:


三、添加右键响应函数

3.1 方法1:WM_CONTEXTMENU响应函数

在类视图中为对话框添加消息WM_CONTEXTMENU的响应函数。

在响应函数中添加代码,加载指定的菜单:

void CAddRightButtonMenuDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{// TODO: 在此处添加消息处理程序代码//从资源文件中加载指定ID的菜单CMenu menu;menu.LoadMenu(IDR_MENU1);//获得指定ID菜单的所有子菜单CMenu* pMenu;pMenu = menu.GetSubMenu(0);//EnableMenuItem的意思是允许、禁止或变灰指定的菜单条目。//为每一个子菜单设置状态pMenu->EnableMenuItem(ID_32771, MF_BYCOMMAND | MF_ENABLED);//激活转态pMenu->EnableMenuItem(ID_32772, MF_BYCOMMAND | MF_ENABLED);//激活转态pMenu->EnableMenuItem(ID_32773, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);//禁用状态,灰色//在鼠标点击处的位置加载出来菜单项pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);pMenu->Detach();menu.DestroyMenu();}

3.2 方法2:WM_RButtonDown响应函数

在类视图中为对话框添加消息WM_RButtonDown的响应函数。

void CAddRightButtonMenuDlg::OnRButtonDown(UINT nFlags, CPoint point)
{// TODO: 在此添加消息处理程序代码和/或调用默认值CMenu menu;menu.LoadMenu(IDR_MENU1);CMenu* pPopup = menu.GetSubMenu(0);CPoint pointPos;GetCursorPos(&pointPos);pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pointPos.x, pointPos.y, this);CDialogEx::OnRButtonDown(nFlags, pointPos);
}

以上两种方式任选一种即可

四、添加菜单响应函数

为每一个子菜单添加菜单响应函数:

在生成的代码中添加响应的动作:

void CAddRightButtonMenuDlg::On32771()
{// TODO: 在此添加命令处理程序代码MessageBox(L"Hello,WaitFoF");
}void CAddRightButtonMenuDlg::On32772()
{// TODO: 在此添加命令处理程序代码MessageBox(L"Hi,WaitFoF");
}void CAddRightButtonMenuDlg::On32773()
{// TODO: 在此添加命令处理程序代码MessageBox(L"I want to eat a apple.");
}

五、测试

六、升级版

为子菜单Hello添加3个子菜单:

为子菜单Hi添加一个子菜单:How old are you?

为子菜单Apple添加2个子菜单:big和small

为每一个菜单添加响应函数:

添加响应内容:

void CAddRightButtonMenuDlg::OnHelloWaitfof()
{// TODO: 在此添加命令处理程序代码MessageBox(L"Hello   Waitfof.");
}void CAddRightButtonMenuDlg::OnHelloTom()
{// TODO: 在此添加命令处理程序代码MessageBox(L"Hello   Tom.");
}void CAddRightButtonMenuDlg::OnHelloSalay()
{// TODO: 在此添加命令处理程序代码MessageBox(L"Hello   Salay.");
}void CAddRightButtonMenuDlg::OnHiH()
{// TODO: 在此添加命令处理程序代码MessageBox(L"怎么老是你?");
}void CAddRightButtonMenuDlg::OnAppleBig()
{// TODO: 在此添加命令处理程序代码MessageBox(L"大苹果");
}void CAddRightButtonMenuDlg::OnAppleSmall()
{// TODO: 在此添加命令处理程序代码MessageBox(L"小苹果");
}

此时的右键右键响应函数选择的是WM_RBUTTONDOWN。

若屏蔽WM_RBUTTONDOWN,选择WM_CONTEXTMENU:
你会发现效果相同,设置的Apple禁用无效。

代码地址:AddRightButtonMenu.rar

MFC实战篇——添加鼠标右键响应菜单相关推荐

  1. WinForm -- 为TextBox文本框添加鼠标右键菜单

    WinForm -- 为TextBox文本框添加鼠标右键菜单 1. 新建一个WinForm项目,放置一个TextBox控件 2. 从工具箱拖进来一个ContextMenuStrip 3. 将TextB ...

  2. 鼠标右键新建菜单删除或添加项目

    因为使用的需要,我们常会在鼠标右键新建菜单中添加项目,或因某种程序删除后鼠标右键新建菜单中残留的项目需要删除,可以用下列方法达到目标. 1.在"开始"中的"运行" ...

  3. Mac OS X下删除或添加鼠标右键菜单项目及清除Mac OS右键菜单重复项

    一.Mac OS X下删除或添加鼠标右键菜单项目 1. 打开 Finder,点击屏幕顶部菜单栏的 "前往",在下拉菜单里选择 "前往文件夹-" 2. 在弹出的输 ...

  4. 右键新建里面没有word和excel_Windows10系统下如何将Sublime Text3添加到右键快捷菜单?...

    由于本人用的Sublime Text是汉化绿色版的,不仅仅是因为绿色版免去了安装步骤 解压即用,还因为里面整合了常用的高效率必备插件,但是发现右键竟然没有用Sublime Text打开的快捷菜单,这对 ...

  5. 定制鼠标右键新建菜单选项

    定制鼠标右键新建菜单选项 在注册表中,HKEY_CLASSES_ROOT中找到要添加的文件拓展名, word 在*:\windows\shellnew\新建 winword8.doc的空word文档 ...

  6. 通过注册文件添加win10右键新建菜单.py文件

    我看了很多添加新建菜单的教程文章,尝试去添加python文件,大都千篇一律,完了还不起作用,后来看了这篇文章才明白,我的电脑系统没有事先注册.py的文件类型. 那么如何注册文件类型并将其添加到右键新建 ...

  7. Vue实战篇十六:导航菜单

    系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...

  8. 添加鼠标右键菜单项(EditPlus为例)

    下载Editplus,发现大多是绿色版,这就导致鼠标右键快捷菜单了,使用起来不方面,上网搜集了下资料,解决方法很简单: 首先进入注册表:regedit 然后如图设置新项. 其中editplus是右键菜 ...

  9. js禁止鼠标右键的菜单事件

    禁止鼠标右键的菜单事件oncontextmenu,禁止默认菜单问题 第一种方法(全局): <script type="text/javascript">document ...

最新文章

  1. 智能车竞赛开启了新的一个周期,让我聚焦十六届赛题吧
  2. 牛客网 华为机试题 数据重复的筛选问题记录
  3. Android——Handler总结
  4. MGM Resorts和NRG Energy在美国完成最大屋顶光伏阵列的安装
  5. oracle rac 节点启动,Oracle 10g RAC 节点自动重启故障处理
  6. Asterisk 1.4.42将成绝唱
  7. Loadrunner报错“Too many local variablesAction.c”解决方法
  8. ASP.NET MVC3 系列教程 - 目录
  9. 在线教育软件开发 教育APP软件开发分析
  10. 共享文件服务器管理软件,企业共享文件管理软件 局域网文件共享工具的选择...
  11. LwIP协议栈——网络接口管理
  12. Virtual Breadboard 4.46 arduino模拟仿真虚拟 破解下载
  13. 华硕Z99jc安装win7出现安装程序无法定位现有系统分区,也无法创建新的系统分区解决办法...
  14. python+pyautogui+pyperclip实现QQ自动加好友功能
  15. 尼康d3200与智能设备 (android) 连接,,尼康D3200有WIFI功能吗
  16. 视频融合技术平台解决方案
  17. Google AutoValue详解
  18. 传智播客管家婆java答案_传智播客黑马19年Java全(IDEA) [230G]|百度云|天翼云|GD|OD...
  19. 聊聊Unity的几种灯光还有灯光烘培
  20. R语言使用caret包的train函数构建xgboost模型(基于dart算法)模型构建分类模型、trainControl函数设置交叉验证参数、自定义调优评估指标

热门文章

  1. cesium实现键盘控制地图场景漫游效果
  2. 使用 extfat + nvme 磁盘,将写入速度提升到5GB/s
  3. UVM学习之路(6)— 基于MCDF的验证平台
  4. 学习笔记(11):第一章: 路由与模板-上下文与模板调用
  5. 从陌生到熟悉,再变成最熟悉的陌生人:伤感日志
  6. Netty如何实现 keepalive和idle监测
  7. Android热修复-Nuwa使用
  8. python学习二十(打仗和删除武器)
  9. 本地会员与新浪微博api绑定和同步登陆
  10. 新浪微博API Oauth2.0 认证。。。