创建一个基于对话框的工程,工程名为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. python dns server开源列表 TODO

    基于dns lib的,https://github.com/andreif/dnslib 有:https://www.cnblogs.com/anpengapple/p/5664500.html ht ...

  2. 关于centOS7的一些笔记

    使用systemctl查看 开启 关闭服务: 查看: systemctl status arcgis.server 开启: systemctl start arcgis.server 关闭: syst ...

  3. 摘抄 - 不为人知的JS调用样式的方法---document.createElement().addRule(..)

    很多人可能在调用css样式都是使用传统的方式调用其实有很多方法可以进行调用,如使用内嵌样式,在html直接加入样式,给定外部样式文件,在外部样式文件中使用 @import url(样式文件路径),这些 ...

  4. 【转载】OAuth的机制原理讲解及开发流程

    1.OAuth的简述 OAuth(Open Authorization,开放授权)是为用户资源的授权定义了一个安全.开放及简单的标准,第三方无需知道用户的账号及密码,就可获取到用户的授权信息,并且这是 ...

  5. 51nod 1220 约数之和【莫比乌斯反演+杜教筛】

    首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...

  6. [转]Boosting

    1 Boosting算法的起源 Boosting方法是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数.Boosting是一种提高任意给定 ...

  7. Git客户端使用教程

    课程地址 <版本控制入门 – 搬进 Github> 笔记参考 <搬进 Github> Git客户端的使用 Git for windows下载 新建一个仓库tata,使用subl ...

  8. 暴力/图论 hihoCoder 1179 永恒游戏

    题目传送门 /* 暴力:也是暴力过了,无语.无向图,两端点都要加度数和点 */ #include <cstdio> #include <algorithm> #include ...

  9. 对数组随机赋值,并输出(Arrays.toString(arr))

    import java.util.Arrays; public class Demo { public static void main(String[] args) { int[] arr = ne ...

  10. 190 Reverse Bits 颠倒二进制位

    颠倒给定的32位无符号整数的二进制位.例如,给定输入 43261596(二进制表示为 00000010100101000001111010011100 ),返回 964176192(二进制表示为 00 ...