MFC实战篇——添加鼠标右键响应菜单
文章目录
- 一、新建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实战篇——添加鼠标右键响应菜单相关推荐
- WinForm -- 为TextBox文本框添加鼠标右键菜单
WinForm -- 为TextBox文本框添加鼠标右键菜单 1. 新建一个WinForm项目,放置一个TextBox控件 2. 从工具箱拖进来一个ContextMenuStrip 3. 将TextB ...
- 鼠标右键新建菜单删除或添加项目
因为使用的需要,我们常会在鼠标右键新建菜单中添加项目,或因某种程序删除后鼠标右键新建菜单中残留的项目需要删除,可以用下列方法达到目标. 1.在"开始"中的"运行" ...
- Mac OS X下删除或添加鼠标右键菜单项目及清除Mac OS右键菜单重复项
一.Mac OS X下删除或添加鼠标右键菜单项目 1. 打开 Finder,点击屏幕顶部菜单栏的 "前往",在下拉菜单里选择 "前往文件夹-" 2. 在弹出的输 ...
- 右键新建里面没有word和excel_Windows10系统下如何将Sublime Text3添加到右键快捷菜单?...
由于本人用的Sublime Text是汉化绿色版的,不仅仅是因为绿色版免去了安装步骤 解压即用,还因为里面整合了常用的高效率必备插件,但是发现右键竟然没有用Sublime Text打开的快捷菜单,这对 ...
- 定制鼠标右键新建菜单选项
定制鼠标右键新建菜单选项 在注册表中,HKEY_CLASSES_ROOT中找到要添加的文件拓展名, word 在*:\windows\shellnew\新建 winword8.doc的空word文档 ...
- 通过注册文件添加win10右键新建菜单.py文件
我看了很多添加新建菜单的教程文章,尝试去添加python文件,大都千篇一律,完了还不起作用,后来看了这篇文章才明白,我的电脑系统没有事先注册.py的文件类型. 那么如何注册文件类型并将其添加到右键新建 ...
- Vue实战篇十六:导航菜单
系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...
- 添加鼠标右键菜单项(EditPlus为例)
下载Editplus,发现大多是绿色版,这就导致鼠标右键快捷菜单了,使用起来不方面,上网搜集了下资料,解决方法很简单: 首先进入注册表:regedit 然后如图设置新项. 其中editplus是右键菜 ...
- js禁止鼠标右键的菜单事件
禁止鼠标右键的菜单事件oncontextmenu,禁止默认菜单问题 第一种方法(全局): <script type="text/javascript">document ...
最新文章
- 智能车竞赛开启了新的一个周期,让我聚焦十六届赛题吧
- 牛客网 华为机试题 数据重复的筛选问题记录
- Android——Handler总结
- MGM Resorts和NRG Energy在美国完成最大屋顶光伏阵列的安装
- oracle rac 节点启动,Oracle 10g RAC 节点自动重启故障处理
- Asterisk 1.4.42将成绝唱
- Loadrunner报错“Too many local variablesAction.c”解决方法
- ASP.NET MVC3 系列教程 - 目录
- 在线教育软件开发 教育APP软件开发分析
- 共享文件服务器管理软件,企业共享文件管理软件 局域网文件共享工具的选择...
- LwIP协议栈——网络接口管理
- Virtual Breadboard 4.46 arduino模拟仿真虚拟 破解下载
- 华硕Z99jc安装win7出现安装程序无法定位现有系统分区,也无法创建新的系统分区解决办法...
- python+pyautogui+pyperclip实现QQ自动加好友功能
- 尼康d3200与智能设备 (android) 连接,,尼康D3200有WIFI功能吗
- 视频融合技术平台解决方案
- Google AutoValue详解
- 传智播客管家婆java答案_传智播客黑马19年Java全(IDEA) [230G]|百度云|天翼云|GD|OD...
- 聊聊Unity的几种灯光还有灯光烘培
- R语言使用caret包的train函数构建xgboost模型(基于dart算法)模型构建分类模型、trainControl函数设置交叉验证参数、自定义调优评估指标