MFC对话框响应ON_UPDATE_COMMAND_UI事件
ON_WM_INITMENU()
ON_WM_INITMENUPOPUP()
// 大气象
ON_UPDATE_COMMAND_UI_RANGE(1001,1002,&OnMenuItemUI)
END_MESSAGE_MAP()
// 设置Check或Enable
void CDlg::OnMenuItemUI(CCmdUI *pCmdUI)
{
if (pCmdUI->m_nID == 1001)
{
pCmdUI->SetCheck(1);
}
if (pCmdUI->m_nID == 1002)
{
pCmdUI->Enable(FALSE);
}
}
BOOL CDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
CMenu menuMain;
menuMain.CreateMenu();
CMenu menuChild;
menuChild.CreatePopupMenu();
menuChild.AppendMenu(MF_STRING,1001,"menu1");
menuChild.AppendMenu(MF_STRING,1002,"menu2");
menuMain.AppendMenu(MF_POPUP,(UINT)menuChild.Detach(),"menu0");
SetMenu(&menuMain);
menuMain.Detach();
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
// 大气象:需要在这里做特殊处理。
void CDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
CDialogEx::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
// TODO: 在此处添加消息处理程序代码
CCmdUI state;
state.m_pMenu = pPopupMenu;
ASSERT(state.m_pOther == NULL);
ASSERT(state.m_pParentMenu == NULL);
// Determine if menu is popup in top-level menu and set m_pOther to
// it if so (m_pParentMenu == NULL indicates that it is secondary popup).
HMENU hParentMenu;
if (AfxGetThreadState()->m_hTrackingMenu == pPopupMenu->m_hMenu)
state.m_pParentMenu = pPopupMenu; // Parent == child for tracking popup.
else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL)
{
CWnd* pParent = this;
// Child windows don't have menus--need to go to the top!
if (pParent != NULL &&
(hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL)
{
int nIndexMax = ::GetMenuItemCount(hParentMenu);
for (int nIndex = 0; nIndex < nIndexMax; nIndex++)
{
if (::GetSubMenu(hParentMenu, nIndex) == pPopupMenu->m_hMenu)
{
// When popup is found, m_pParentMenu is containing menu.
state.m_pParentMenu = CMenu::FromHandle(hParentMenu);
break;
}
}
}
}
state.m_nIndexMax = pPopupMenu->GetMenuItemCount();
for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;
state.m_nIndex++)
{
state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);
if (state.m_nID == 0)
continue; // Menu separator or invalid cmd - ignore it.
ASSERT(state.m_pOther == NULL);
ASSERT(state.m_pMenu != NULL);
if (state.m_nID == (UINT)-1)
{
// Possibly a popup menu, route to first item of that popup.
state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex);
if (state.m_pSubMenu == NULL ||
(state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||
state.m_nID == (UINT)-1)
{
continue; // First item of popup can't be routed to.
}
state.DoUpdate(this, TRUE); // Popups are never auto disabled.
}
else
{
// Normal menu item.
// Auto enable/disable if frame window has m_bAutoMenuEnable
// set and command is _not_ a system command.
state.m_pSubMenu = NULL;
state.DoUpdate(this, FALSE);
}
// Adjust for menu deletions and additions.
UINT nCount = pPopupMenu->GetMenuItemCount();
if (nCount < state.m_nIndexMax)
{
state.m_nIndex -= (state.m_nIndexMax - nCount);
while (state.m_nIndex < nCount &&
pPopupMenu->GetMenuItemID(state.m_nIndex) == state.m_nID)
{
state.m_nIndex++;
}
}
state.m_nIndexMax = nCount;
}
}
// 大气象:注意不是这里
void CDlg::OnInitMenu(CMenu* pMenu)
{
CDialogEx::OnInitMenu(pMenu);
// TODO: 在此处添加消息处理程序代码
}
对话框里创建的菜单,响应函数可以写在其他类。
需要源码的,留下邮箱索取。
url:http://greatverve.cnblogs.com/archive/2012/11/28/dlg-on-update-command-ui.html
参考:
http://support.microsoft.com/kb/242577/zh-cn
http://greatverve.cnblogs.com/archive/2012/11/21/mfc-dlg-menu-cmd.html
MFC对话框响应ON_UPDATE_COMMAND_UI事件相关推荐
- MFC中,多个Button响应同一个事件
问题:有10个Button,如何让他们响应同一个事件函数,并且知道是哪个Button触发的 解决方法: 1.让十个Button的资源号连续 2.Dlg.h中添加代码: void OnButtonC ...
- MFC对话框动态刷新图片(仿照全屏屏保)
最近做MFC对话框工程 用到全屏刷新图片的功能,由于功能实现比较简单,便使用CImage类配合定时器制作,下面贴上实现方式: 增加消息响应事件: //在对话框属性的消息中 添加WM_PAINT与WM_ ...
- 计算机自带的科学计算器代码,[置顶] 科学计算器(简化版:基于MFC对话框)
科学计算器(简化版) 最终界面: 全部源代码下载地址: 链接: http://download.csdn.net/detail/u012339743/8198227 详细编写过程: 1. 打开V ...
- c语言windows程序设计 - 第十天,C语言Windows程序设计 - 第十天 - 响应键盘事件...
响应键盘事件 ------------------------ 在开始学习有关键盘事件的知识前首先来看一段代码(回调函数这部分的代码): 1 LRESULT CALLBACK WndProc( HWN ...
- MFC对话框中的工具栏、状态栏设计小结
对网上的资料结合自己的实践的总结,由于大部分都是网上先辈们的经验,这里只是直接将内容拿来,格式优化一下更易读而已. 对话框中建立工具栏的方法 工具栏中包含了一组用于执行命令的按钮,每个按钮都用一个图标 ...
- CEF:MFC 对话框 Demo(VS2013)
原文链接:https://blog.csdn.net/blackwoodcliff/article/details/74276848 随着 HTML5 的崛起和 IE 的淘汰,微软 Web Brows ...
- 用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转)
用回车键实现MFC对话框中TAB键控件输入焦点在控件中跳转的效果(转) 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://hcq11.blogbus.com/logs/5 ...
- MFC对话框应用程序中谷歌CEF浏览器内核的使用
MFC对话框应用程序中谷歌CEF浏览器内核的使用 最近在做一个与浏览器相关的MFC项目,用户要求使用IE和谷歌双内核.对于IE内核可以直接使用MFC中的ACTIVEX控件,但是对于谷歌浏览器内核却并没 ...
- MFC 对话框背景图片
在windows开发当中做界面的主要技术之一就是使用MFC,通常我们看到的QQ,360,暴风影音这些漂亮的界面都可以用MFC来实现.今天我们来说一下如何用MFC美化对话框,默认情况下,对话框的背景如下 ...
最新文章
- RESTful 架构基础
- BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的
- DL之CNN:基于CNN-RNN(GRU,2)算法(keras+tensorflow)实现不定长文本识别
- VS2008工具,两种加入库的方法。 设置程序运行时目录
- Linux mysql 登录 2002,Linux 下 Mysql error 2002 错误解决
- 创建一个简单的WCF程序
- C#接口归纳总结实例详解
- CSS失效的问题总结(转:孟子E章)
- 计算机网络学习笔记:第二章
- c#winform窗口页面一打开就加载的方法
- linux 消息队列_Linux消息队列
- 使用xampp和tiki搭建内网wiki
- linux内存回收500M,回收和交换Linux的内存回收和交换
- golang:map转json字符串
- 全国计算机三级网络技术题库南开,计算机三级网络技术机题库_及答案(南开100题).doc...
- PowerBi包含什么,以及每一个的介绍
- 网络1712--c语言函数作业总结
- X86与ARM平台下的参数传递机制
- 量化金融投资及其python应用_量化投资:用Python实现金融数据的获取与整理
- python笔记本电脑推荐2020_最新版:2020年适合程序员的推荐笔记本电脑
热门文章
- python 元类的call_通过 python的 __call__ 函数与元类 实现单例模式
- 电脑的基础知识_电脑的基础知识大全,你确定都知道?
- oracle+查表物理块数,查询Oracle表实际物理使用大小
- mysql 安装导航_ubuntu下安装Mysql
- plsa的java实现_java在注解中绑定方法参数的解决方案
- signature=2d36ad490c0d9e19a6dc808d43a34033,Matemàtica discreta : problemes resolts
- mysql服务器的搭建_基于linux的Mysql服务器的搭建
- VB:谁终结了我的程序
- 机器学习算法太厉害,导致人类也通不过谷歌验证码
- 2018星际AI大赛冠军诞生!一个个机器学习算法,都输给不会学习的韩国bot