转自:http://www.jizhuomi.com/software/210.html

上一节讲了标签控件Tab Control以后,常用控件的内容就全部讲完了,当然并没有包括所有控件,主要是一些很常用很重要的控件。本节开始讲解菜单的概念及使用。

菜单简介

菜单在界面设计中是经常使用的一种元素,包括Windows系统中的窗口、智能终端设备的应用界面等都会经常见到菜单的身影。我们在对可视化窗口操作时,菜单确实提供了很大方便。

菜单可以分为下拉式菜单弹出式菜单

下拉式菜单一般在窗口标题栏下面显示,大家还记得我们在VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)中创建的HelloWorld单文档工程吗?它的运行结果窗口的标题栏下就是下拉式菜单。下拉式菜单通常是由主菜单栏、子菜单及子菜单中的菜单项和分隔条所组成的。

弹出式菜单一般可以通过单击鼠标右键等操作显示。它的主菜单不可见,只显示子菜单。

VS2010菜单资源详解

菜单也可以在VS2010的资源视图中直接创建编辑。我们先来创建一个新的MFC单文档工程,具体看看菜单的组成结构及各种标记的意义。

按照VS2010/MFC编程入门之二中的步骤创建一个名为“Example34”的MFC单文档工程。打开Resource View资源视图,展开Example34->Example34.rc->Menu,我们可以看到有一个ID为IDR_MAINFRAME菜单资源,双击打开,菜单资源显示如下图:

上边包含“File”的一栏是主菜单栏,点击“File”弹出子菜单,可以看到子菜单中有多个菜单项和分隔条。菜单项中含有“...”则表示点击后会弹出对话框。

除了这些,我们还注意到,很多菜单项的标题文本中都有一个字母带下划线,带下划线的字母为热键,例如,主菜单栏上的“File”中字母“F”带下划线,F就是热键,程序运行并显示窗口时,在键盘上点击Alt+F就等同于直接点菜单项File,弹出File下的子菜单后,点击“Open”的热键O就可以实现与直接点菜单项Open相同的功能。

那么热键是如何定义的呢?我们可以看下“File”菜单项的属性,Caption为“&File”,很明显,只要在要定义为热键的字母前加&就可以了。

有些菜单项的右侧还显示了一些字符串,例如,“New”的右侧显示有“Ctrl+N”,这些代表的是快捷键,也就是“New”菜单项的快捷键是Ctrl+N,“Open”菜单项的快捷键是Ctrl+O,用这些组合键就能实现与相应菜单项一样的功能。

快捷键如何定义?我们再来看看“Open”菜单项的Caption属性,为“&Open...\tCtrl+O”,这里的\t表示在显示前面的文本后跳格再显示快捷键Ctrl+O,但这样设置其Caption属性只是能显示出快捷键,要实现快捷键的功能还需要在Accelerator资源中设定。资源视图中展开Example34.rc->Accelerator,双击打开下面的IDR_MAINFRAME,如下图:

Accelerator中有四列,分别为:ID、Modifier、Key和Type。ID就是菜单项的ID,Modifer和Key就代表了组合键。例如,Open菜单项的ID为ID_FILE_OPEN,Modifer为“Ctrl”,Key为“O”。

VS2010菜单资源编辑

我们试着在Example34的IDR_MAINFRAME菜单资源中添加菜单项。

在主菜单栏的“Help”菜单项上点右键,弹出右键菜单,选择“Insert New”,就在“Help”菜单项前添加了一个空的菜单项,我们可以直接在其中输入标题,也可以在属性页中设置Caption属性,标题设为“&Tools”。

然后编辑Tools下子菜单的第一个菜单项,标题设为“&Draw\tCtrl+D”,即热键为D,快捷键为Ctrl+D。其ID默认为ID_TOOLS_DRAW。为了实现快捷键的功能,还需要编辑Accelerator,打开Accelerator,在最下面的空白行中,ID选择为ID_TOOLS_DRAW,Modifier选择“Ctrl”,Key输入“D”,这样就设置好了快捷键。

最终的菜单资源如下图:

本节内容就是这些了,主要是关于菜单的一些基础知识,比较好理解。

VS2010-MFC(菜单:VS2010菜单资源详解)的更多相关文章

  1. VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)

    上一节讲了标签控件Tab Control以后,常用控件的内容就全部讲完了,当然并没有包括所有控件,主要是一些很常用很重要的控件.本节开始鸡啄米将为大家讲解菜单的概念及使用. 菜单简介 菜单在界面设计中 ...

  2. Icon资源详解[2]

    本文分享&备忘最近了解到的icon资源在windows平台下相关的一部分知识.所有测试代码都尽可能的依赖win32 API实现.通过源码可以了解其结构,同时它们也是可复用的代码积累.     ...

  3. 【MFC】MoveWindow();函数使用详解

    摘自:http://blog.csdn.net/yjkwf/article/details/5281207 CWnd::MoveWindow 详解 2010-02-02 16:08 3432人阅读 评 ...

  4. VS2010 MFC中 给菜单项添加消息响应函数

    久了没用,居然忘记了该怎样给菜单项添加响应函数了~~~~~~~~T_T 特记于此: 1. 在资源视图的Menu里找到自己要添加的菜单,然后输入菜单项. 2. 右击菜单项选属性,设置Popup为Fals ...

  5. VS2010安装项目程序打包操作详解

    (转自:http://blog.sina.com.cn/s/blog_74f702e60101at62.html) 1.打开VS2010,选择 新建项目---其他项目类型---Visual Studi ...

  6. Win7 在安装vs2010后向sql2008添加SQL_Server_Management详解

    VS2010自带sql server 2008,但自带的版本缺少SQL_Server_Management,解决如下: 安装的先决条件: 1.SQLManagementStudio_x86_CHS(h ...

  7. win7旗舰版在安装vs2010后向sql2008添加SQL_Server_Management详解

    原文地址:http://blog.csdn.net/bruce_zeng/article/details/8202746

  8. Icon资源详解[1]

    本文分享&备忘最近了解到的icon资源在windows平台下相关的一部分知识,所有测试代码都尽可能的依赖win32 API实现.更全面的知识,参考文末列出的”参考资料“.      关键字:I ...

  9. Android下的xml资源详解

    最近遇到的bitmap资源 <?xml version= "1.0" encoding ="utf-8"?> <bitmap xmlns:an ...

随机推荐

  1. C++11 auto 与 右值

    auto: auto T = xxx; // 产生一个变量,自动推导变量类型.  存在变量拷贝的消耗.auto& T = xxx; // 产生一个变量的引用,自动推导变量类型.减少拷贝的消耗. ...

  2. 「题解」:毛一琛/$cow$ $subsets$

    问题 A: 毛一琛/$cow$ $subsets$ 时间限制: 1 Sec  内存限制: 512 MB 题面 题面谢绝公开. 题解 题名貌似是个大神??看起来像是签到题然后就死了. 首先$O(3^n) ...

  3. Java中获取前一天和后一天时间

    今天在开发项目的时候遇到一个问题就是怎么获取当前时间的前一天和后一天,这个实现的逻辑并不复杂,自己要写的话的也不是难事,但是貌似感觉没必要自己写这样的方法,想想Java中的Calendar类应该有这样 ...

  4. 01二维背包——poj2576

    /* 要求把a数组分成两个集合,两个集合人数最多差1,并且元素之和的差尽可能小 那只要把所有可行的列出来即可 01二维背包,即体积是个二维数据,那么我们的背包状态也应该设为二维 dp[j][k]设为 ...

  5. java 直接调用micorosoft office (2003-2007和2010版本)中excel中计算函数

    主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx 读取excel和MySQL相关: java的poi技 ...

  6. NX二次开发-UFUN文件选择对话框UF_UI_create_filebox

    NX11+VS2013 #include <uf.h> #include <uf_ui.h> UF_initialize(); //文件选择对话框 char sPromptSt ...

  7. 牛客多校第十场 F Popping Balloons 线段树维护稀疏矩阵

    题意: 给定一个稀疏矩阵,里面有若干个气球,让你横着开三枪,竖着开三枪,问最多能打爆多少气球,要求相同方向,相邻两枪必须间隔r. 题解: 横向记录每列有多少个气球,分别在哪行上. 然后把这个数据改造成 ...

  8. 【开篇】基于C#+EmguCV的机器视觉平台开发

    市面上关于通用的机器视觉平台已有不少,一些大的视觉产品.设备制造商都有开发自己的一套系统.其通用性也都有一些行业局限,难以囊括所有可能性,一些需要经过二次开发,这也是难以攻克的问题.本人水平有限,再加 ...

  9. csv转字典

    with open('filename','r') as csv_f: reader = csv.reader(csv_f) fieldnames = next(reader) csv_reader ...

  10. Alice拜年 模板题 /// 最短路Dijk oj1344

    题目大意: 大年初一,Alice带上拜年礼物去给N-1位亲朋好友长辈拜年,亲友真多啊,是个大家族.由于Alice才2岁,力气不大,每次只能拿一份礼物,拜完年之后,要回家取第二份礼物,然后去下一家拜年( ...