MFC 对话框中动态创建N级菜单以及响应事件
创建一个基于对话框的工程,工程名为CreateMenu
为该对话框增加一个文件菜单项和测试菜单项,如下图所示
![]()
测试菜单项至少要有一个子菜单项
在对话框属性中关联该菜单
在resource.h中增加一个ID_TESTMENU宏
#define ID_TESTMENU 5000
在对话框中添加一个Button按钮,建立消息映射,编辑代码如下
void CCreateMenuDlg::OnButton1()
{
// TODO: Add your control notification handler code here
char buf[2];
//获取顶级菜单
CMenu* pMenu=GetMenu();
//获取1级菜单
CMenu* pFileMenu=pMenu->GetSubMenu(0);
CMenu* pTestMenu=pMenu->GetSubMenu(1);
//添加2级菜单
if(pTestMenu->GetSafeHmenu()==NULL)
return;
//添加一个2级弹出菜单,将"文件"菜单项作为该菜单的子菜单
pTestMenu->AppendMenu(MF_POPUP,(UINT)pFileMenu->m_hMenu,"文件");
//添加一个2级弹出菜单,该菜单的子菜单为空
pTestMenu->AppendMenu(MF_POPUP,(UINT)pTestMenu->m_hMenu,"测试");
//添加10个2级普通菜单
for(UINT m_ID=1;m_ID<=10;m_ID++)
{
itoa(m_ID,buf,10);
pTestMenu->AppendMenu(MF_SEPARATOR);
pTestMenu->AppendMenu(
MF_STRING,m_ID+ID_TESTMENU,"2级菜单"+CString(buf));
}
//添加n级菜单
CMenu* pnMenu=pTestMenu->GetSubMenu(2);
pnMenu->AppendMenu(MF_POPUP,(UINT)pnMenu->m_hMenu,"3级菜单");
for(int i=0;i<5;i++)
{
pnMenu=pnMenu->GetSubMenu(0);
if(pnMenu==NULL) return;
itoa(i+4,buf,10);
pnMenu->AppendMenu(
MF_POPUP,(UINT)pnMenu->m_hMenu,buf + CString("级菜单"));
}
pnMenu->GetSubMenu(0)->AppendMenu(
MF_STRING,ID_TESTMENU,"9级菜单");
}
响应单击菜单的事件
添加OnCommand的消息映射,编辑代码如下
BOOL CCreateMenuDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
UINT uMsg=LOWORD(wParam);
char buf[2];
if(uMsg==ID_TESTMENU)
{
MessageBox("HELLO!");
}
for(UINT i=1;i<=10;i++)
{
if(uMsg==ID_TESTMENU+i)
{
itoa(i,buf,10);
MessageBox("HELLO! " + CString(buf));
}
}
return CDialog::OnCommand(wParam, lParam);
}
运行结果:
![]()
MFC 对话框中动态创建N级菜单以及响应事件的更多相关文章
- MFC对话框中使用CHtmlEditCtrl
MFC对话框中使用CHtmlEditCtrl 感谢原帖作者: http://blog.csdn.net/tingya/article/details/2028172 我在VS2008校正了一些代码. ...
- MFC对话框中显示BMP,JPG图片
//************************************ // 方法说明: 显示JPG和GIF.BMP图片 // 参数说明: CDC * pDC 设 ...
- 在MFC对话框中添加状态栏
如果我们想实现在MFC对话框中添加状态栏显示,如何例如分状态栏为两列,第一列显示鼠标的当前位置,第二列显示当前的时间,(如上图). 1. 首先,打开在资源视图的String Table并添加两个ID: ...
- MFC对话框中显示背景图片
在MFC对话框中显示图片,四个步骤. 1.首先得在VC6.0或者VS2008(其他版本也是一样)中导入GDI文件.(网上下载:) GDI含义是图形设备接口,主要任务是负责系统与绘图程序之间的信息交换, ...
- Delphi中动态创建窗体有四种方式
Delphi中动态创建窗体有四种方式,最好的方式如下: 比如在第一个窗体中调用每二个,主为第一个,第二个设为动态创建 Uses Unit2; //引用单元文件 procedure TForm1.But ...
- WPF 中动态创建和删除控件
原文:WPF 中动态创建和删除控件 动态创建控件 1.容器控件.RegisterName("Name",要注册的控件) //注册控件 2.容器控件.FindName(" ...
- HTML中关于动态创建的标签无法绑定js事件的解决方法:.on()方法的 [.selector]
在前端页面的时候,会经常遇到用JavaScript动态创建出来的Button按钮或其他标签无法使用点击事件的问题.如下代码,使用jquery在body中动态创建一个class为demo的Button按 ...
- jquery中动态新增的元素节点无法触发事件解决办法
在使用jquery中动态新增的元素节点时会发现添加的事件是无法触发的,我们下面就为各位来详细的介绍此问题的解决办法. 比如做一个ajax读取留言列表的时候,每条留言后面有个回复按钮,class为“re ...
- es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式
es6 Object.assign 目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...
随机推荐
- MFC的消息映射机制揭秘
MFC的设计者们在设计MFC时,紧紧把握一个目标,那就是尽可能使得MFC的代码要小,速度尽可能快.为了这个目标,他们使用了许多技巧,其中很多技巧体现在宏的运用上,实现MFC的消息映射的机制就是其中之一 ...
- 各国iPhone5系列最新裸机价格
美国/加拿大/中国香港/中国大陆iPhone5系列最新裸机价格
- 疯牛-- Aggressive cows (二分)
疯牛 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小 ...
- android学习--视图列表(ListView和ListActivity)
说明: 视图列表(ListView和ListActivity)与AutoComplete.Spinner类似,它们都须要一个供显示的列表项,能够须要借助于内容Adapter提供显示列表项 创建List ...
- 常见的transformation 和 Action
常见transformation map 将RDD中的每个元素传入自定义函数,获取一个新的元素,然后用新的元素组成新的RDD filter 对RDD中每个元素进行判断,如果返回true则保留,返回fa ...
- 更好地认知Azure
编辑人员注释:本文章由 Windows Azure 网站团队项目经理 Erez Benari 撰写. 我们的网站 http://www.windowsazure.com 包含大量信息,并且也在不断添加 ...
- CEOI2014 day1 task3 Question
题目 传送门. 算法 以下描述都举这个例子:\(x\)是\(11\),\(y\)是\(5\). 算法1 把\(x\)和\(y\)化成二进制,最多\(10\)位,那么\(x=1011_2\),\(y=0 ...
- 异常:未能载入文件或程序集”DAL”或它的某一个依赖项——解决的方法
以下是我再使用抽象工厂+反射重构机房时,在Factoy中出现了以下一个问题: 去网上查了一下资料,发现这是一个非常普遍的问题,它出现的原因主要有两种: 第一种: 载入DLL路径错误.解决的方法是调整D ...
- 挺苹果的声音,iPhone 5s的两处进步
苹果iPhone 5s发布后的两处重大进步让我很关注,但看了网上众多网友的点评,又深深的被中国当前手机发烧友圈的这种屌丝文化所震撼,这不是一条正确的道路,这将把中国的手机产业引向歧途,所以我不得不说几 ...
- 学习笔记之NodeJs基本操作
nodejs安装见文章:windows下安装node.js及less 运行js文件:node xxx.js 调用http模块,并指定端口为3000,向客户端输出<h1>Node.js< ...