创建一个基于对话框的工程,工程名为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 菜单的更多相关文章

  1. 实现MFC菜单画笔画圆,并且打钩

    这个是用最简单的方法,移动客户区,圆会不见,所以下一篇我还要改进. 首先新建一个MFC单文件,在资源那里的菜单下,建立画笔,可以弹出红画笔,蓝画笔和绿画笔,,给出ID_RED,ID_BLUE,ID_G ...

  2. vc2008中mfc菜单、控件等汉字显示为问号或乱码的解决方法

    在vc2008中建立基于mfc的project.在向导的Application type页面中如果在resource language选项中选择"英语(美国)"(图一),那么在pr ...

  3. 【MFC - 菜单】在对话框程序中添加菜单栏(CMenu)(转)

    原文转自 http://lishiqiang1988.blog.163.com/blog/static/41147912201382104631547/ VS2010的MFC对话框程序中添加菜单栏的过 ...

  4. MFC菜单、工具栏和状态栏

    菜单:CMenu类 CMenu类的主要成员函数 BOOL LoadMenu(UINT nIDResource); 加载菜单资源,并将其附加到CMenu对象上.参数nIDResource指定了要加载的菜 ...

  5. MFC 菜单操作

    在CMainFrame中OnCreate函数中添加下列:(注意在return(0)前添加) 在文件,新建前打钩 法1: GetMenu()->GetSubMenu(0)->CheckMen ...

  6. MFC 菜单编程 -- 总结

    菜单结构 一个菜单栏可以有若干个子菜单,而一个子菜单又可有若干个菜单项.对于菜单栏的子菜单,由左至右从0开始索引.对于特定的子菜单的菜单项,由上至下建立从0开始的索引.访问子菜单和菜单项,均可通过其索 ...

  7. 图文详解MFC程序设置菜单快捷键

    原来觉得添加个快捷键就只要几分钟,上网搜索文章都写得很模糊, 只有这边文章不错. http://www.cplusplus.me/1263.html http://blog.sina.com.cn/s ...

  8. MFC之创建多级动态菜单

    一开始以我是这样做的,结果是错误的: 这段代码第一次点击时,会在第6个位置创建MFC菜单,我本以为再次点击,menu->GetSubMenu(5)返回的值就不会为空了,但事实是它返回了NULL, ...

  9. 笔试、面试重点总结:WIN32、MFC与Linux

    win32 1. Win32应用程序的基本类型. 2. 创建win32窗口程序的几个步骤,及使用到的函数. 3. nmake 与 makefile. 4. 有哪些字符集? Win32对于各种字符集如何 ...

随机推荐

  1. 并不对劲的bzoj1500: [NOI2005]维修数列

    传送门-> 这题没什么好说的……小清新数据结构题……并不对劲的人太菜了,之前照着标程逐行比对才过了这道题,前几天刚刚把这题一遍写对…… 其实这题应该口胡很容易.操作1,2,3,4,5就是普通的s ...

  2. Linux 性能工具集

    系统级别: 下面这些工具利用内核的计数器在系统软硬件的环境中检查系统级别的活动. vmstat: 虚拟内存和物理内存的统计,系统级别. mpstat: 每个CPU 的 使用情况. iostat: 每个 ...

  3. 【转】使用git将项目上传到github(最简单方法)

    原文地址:http://www.cnblogs.com/cxk1995/p/5800196.html 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ ...

  4. 腾讯API

    相关文档: API列表  腾讯开放平台联调工具集  公共返回码说明 SDK下载

  5. ASP.NET项目开发实战<<一键创建解决方案>>

    视频演示地址:http://www.youku.com/playlist_show/id_23192838.html 第一步:创建项目需要的数据库 打开辅助开发工具,如下图 从左侧菜单找到 项目数据库 ...

  6. C# 反射 设置实体属性

    C# 反射 设置实体属性 http://blog.csdn.net/cestarme/article/details/6548126 C#反射设置属性值和获取属性值 http://www.cnblog ...

  7. bzoj 3105: [cqoi2013]新Nim游戏【线性基+贪心】

    nim游戏的先手必胜条件是所有堆的火柴个数异或和为0,也就是找一个剩下火柴堆数没有异或和为0的子集的方案,且这个方案保证剩下的火柴个数总和最大 然后我就不会了,其实我到现在也不知道拟阵是个什么玩意-- ...

  8. 第四章之S5PV210内存初始化

    1,既然UART可以打印出信息来,那我们可以打印内存中的值.在506行添加如下代码: /***UART transmit function by xu ***/ display_addr_dat: l ...

  9. [POI2001]Gra绿色游戏

    Description 绿色游戏是一种两人游戏,双方分别称Ann和Billy.游戏的内容主要是轮流在棋盘上移动一颗棋子.棋盘上的点一部分是绿色的,其余是白色的:全部从1至a+b编号.编号1至a的点属于 ...

  10. AngularJs 的ng-include指令的使用

    AngularJs通过指令ng-include来将页面中共用的模块分离出来,这个功能和mvc里面的分部页的作用一样的. 先看文件的结构: 父页面: <!DOCTYPE html> < ...