工作中需要创建一个动态增长的层叠菜单,类似于动态增长的多语言切换菜单,也是废了好大劲哪,分享一下,请交流参考。

    类似效果图:

    

    弹出子菜单各菜单项的意义一致,用ON_COMMAND_RANGE宏来统一实现消息映射。

    首先是弹出子菜单的创建:  

    CMenu subMenu;
    subMenu.CreatePopupMenu();
    for (int i = ; i < m_aLanguages.GetSize(); i++)
    {
    subMenu.AppendMenu(MF_STRING, ID_LANGUAGE_FIRST + i, GetLanguageName(m_aLanguages[i]) );
    }
    CString menustr(_T("Language"));
    popMenu.AppendMenu(MF_POPUP, (UINT)subMenu.m_hMenu, menustr); 
    

      DWORD pos = GetMessagePos();
      CPoint pt(LOWORD(pos), HIWORD(pos));
      popMenu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, pt.x, pt.y, AfxGetMainWnd());

    m_aLanguages是已知的语言ID Array, GetLanguageName函数可以获取对应语言ID的语言名称,ID_LANGUAGE_FIRST是语言菜单项起始ID。
    
    其次是菜单消息映射实现:
    afx_msg void OnLanguage(UINT nId);

    ON_COMMAND_RANGE(ID_LANGUAGE_FIRST, ID_LANGUAGE_LAST, OnLanguage)

    void CMainFrame::OnLanguage(UINT nId)
    {
    UINT nCurSelID = nID - ID_LANGUAGE_FIRST;
    // Do something ......
    }

    注意:ON_COMMAND_RANGE消息映射函数的参数是nId,而不是wParam、lParam。

VC++ 创建一个动态增长的层叠菜单的更多相关文章

  1. 创建一个动态Web项目:

    开始你的Eclipse,然后进入“文件”>“新建”>“动态Web项目,然后输入项目名称为HelloWorldStruts2和设置其他的选项,在下面的屏幕: 选择在屏幕上的所有默认选项,最后 ...

  2. Eclipse创建一个动态maven项目详细步骤

    新建maven项目,new一个Dynamic Web Project 项目 输入完项目名直接finish 配maven,右键项目configure,选择Convert to Plug-in Proje ...

  3. 1、创建一个JPA project(解决“at least one user library must be selected”问题)

    (注:本系列笔记是在学习尚硅谷JPA课程的时候写下的,结合课程内容和自我理解,方便自己以后进行复习) 一.在创建JPA之前看看什么是JPA 1.Java Persistence API:用于对象持久化 ...

  4. Eclipse创建一个Maven Web项目

    在这篇文章中,我们将演示如何在Eclipse IDE中使用maven创建一个动态Web项目. 使用的工具和技术 - Eclipse Jee Oxygen Maven 3.3.3 JavaSE 1.8 ...

  5. [译]NeHe教程 - 创建一个OpenGL窗体

    原文: Setting Up An OpenGL Window 欢迎阅读我的OpenGL教程.我是一个热爱OpenGL的普通码农!我第一次听到OpenGL是在3Dfx刚发布他们给Voodoo I显卡的 ...

  6. 创建一个struts2的HelloWorld

    1.下载struts2的jar包 http://struts.apache.org/download.cgi#struts255 下载一个稳定版本Struts 2.3.31 里面提供了maven ja ...

  7. 跟Google学习Android开发-起始篇-用碎片构建一个动态的用户界面(3)

    4.3 构建一个灵活的用户界面 当设计你的应用程序要支持大范围的屏幕尺寸时,你可以在不同的布局配置中重用碎片,来根据可用的屏幕空间优化用户体验. 例如,在手持设备上,它可能是适应来在一个单窗格用户界面 ...

  8. 【Android Developers Training】 21. 创建一个可变动的UI

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. 改maven下创建的动态网站依赖的jre版本

    问题描述 通过maven创建一个动态网站后,eclipse会提示一个提醒 Build path specifies execution environment J2SE-1.5. There are ...

随机推荐

  1. linux 日志定时轮询流程详解(logrotate)

    logrotate介绍 对于Linux系统安全来说,日志文件是极其重要的工具.日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.当日志文件不断增长的时候,就需要定 ...

  2. SQL Server 创建约束图解 唯一 主键

    SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束,今天使用SQL Server2008来演示下这几种约束的创 ...

  3. 异常处理:1215 - Cannot add foreign key constraint

    最近在做新生入学系统,学生表中包括新生的班级,专业等信息,班级,专业就需要和班级表,专业表进行关联,但是在添加外键的过程中却出现了“Cannot add foreign key constraint” ...

  4. 二 、在 JDK 6 and JDK 7中 substring() 方法

    在JDK6 和JDK 7 里面substring(int beginIndex, int endIndex)的方法是不同的.知道这种区别会帮助你更好用它们.为了简单期间,下面用substring() ...

  5. Rokid开发者社区skill之【历史上的今天】之简介+玩法+设计+实现+心得

    Skill简介: 来源:好奇心.探索欲.趣味性: 资源:百度百科: 方式:实时获取,自动更新: 技能玩法: 想要进入历史上的今天这个skill,则对若琪说:若琪,打开历史上的今天. 想要了解某天的历史 ...

  6. 复习,关于server.xml的一点理解

    刚才在思考,我所写的一些java代码存放在了eclipse的一个workspace的目录下,这个目录下还包含我的web-project的所有html和jsp文件,以及/WEB-ROOT/WEB-INF ...

  7. LeetCode: Sort Colors 解题报告

    Sort ColorsGiven an array with n objects colored red, white or blue, sort them so that objects of th ...

  8. js中引号("")中间设置变量

  9. 一款基于jquery超炫的图片切换特效

    今天为给大家介绍一款基于jquery超炫的图片切换特效.由百叶窗飞入显示图片.图片消息的时候也是百叶窗渐行渐远.用于图片展示,效果还是非常好,我们一起看下效果图: 在线预览   源码下载 来看下实现的 ...

  10. Unity3D可以查看YAML格式的场景文件,采用Notepad++

    在Editor Settings 将Asset Serialization 的 mode设置成Force Text,否则不能查看YAML格式! Unity圣典描述:Textual Scene File ...