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 ...
随机推荐
- JAVAC 命令使用方法
结构 javac [ options ] [ sourcefiles ] [ @files ] 參数可按随意次序排列. options 命令行选项. sourcefiles 一个或多个要编译的源文件( ...
- 关于Cocos2d-x 3.0正式版 粒子问题在IOS上正常显示,在Android下有问题的解决方式
前几个在Cocos2d-x论坛上,有人提到粒子系统的问题..这里列举一下解决的方法: 或许到时候大家用粒子效果的时候也会发现这个问题,如今把这个问题的解决办法说出来.至于原因我也不知道是引擎的问题还是 ...
- Android--开发过程中使用到的长度单位
px:表示屏幕实际的像素. in:表示英寸. mm:毫米. pt:表示一个点,是屏幕的物理尺寸. dp:(与密度无关的像素)逻辑长度单位,在160dpi屏幕上,1dp = 1px = 1/160英寸 ...
- 基于visual Studio2013解决C语言竞赛题之0904文件排序
题目
- ESRI Shapefiles (SHP)
ESRI Shapefiles (SHP) Also known as ESRI ArcView Shapefiles or ESRI Shapefiles. ESRI is the company ...
- POJ 2455 网络流 基础题 二分+网络流 dicnic 以及 sap算法
Secret Milking Machine Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8189 Accepted: ...
- KVM虚拟机介绍
一 KVM虚拟机简介 kernel-based Virtual Machine的简称,是一个开源的 系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux ...
- HDU 4882 ZCC Loves Codefires(贪心)
ZCC Loves Codefires Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- java对象占用内存大小计算方式
案例一: User public class User { } UserSizeTest public class UserSizeTest { static final Runtime runTim ...
- winform窗体全屏
bool fullscreen = false;Rectangle rect = new Rectangle();private void button4_Click(object sender, E ...