VS2010-MFC(菜单:VS2010菜单资源详解)
转自: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菜单资源详解)的更多相关文章
- VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
上一节讲了标签控件Tab Control以后,常用控件的内容就全部讲完了,当然并没有包括所有控件,主要是一些很常用很重要的控件.本节开始鸡啄米将为大家讲解菜单的概念及使用. 菜单简介 菜单在界面设计中 ...
- Icon资源详解[2]
本文分享&备忘最近了解到的icon资源在windows平台下相关的一部分知识.所有测试代码都尽可能的依赖win32 API实现.通过源码可以了解其结构,同时它们也是可复用的代码积累. ...
- 【MFC】MoveWindow();函数使用详解
摘自:http://blog.csdn.net/yjkwf/article/details/5281207 CWnd::MoveWindow 详解 2010-02-02 16:08 3432人阅读 评 ...
- VS2010 MFC中 给菜单项添加消息响应函数
久了没用,居然忘记了该怎样给菜单项添加响应函数了~~~~~~~~T_T 特记于此: 1. 在资源视图的Menu里找到自己要添加的菜单,然后输入菜单项. 2. 右击菜单项选属性,设置Popup为Fals ...
- VS2010安装项目程序打包操作详解
(转自:http://blog.sina.com.cn/s/blog_74f702e60101at62.html) 1.打开VS2010,选择 新建项目---其他项目类型---Visual Studi ...
- Win7 在安装vs2010后向sql2008添加SQL_Server_Management详解
VS2010自带sql server 2008,但自带的版本缺少SQL_Server_Management,解决如下: 安装的先决条件: 1.SQLManagementStudio_x86_CHS(h ...
- win7旗舰版在安装vs2010后向sql2008添加SQL_Server_Management详解
原文地址:http://blog.csdn.net/bruce_zeng/article/details/8202746
- Icon资源详解[1]
本文分享&备忘最近了解到的icon资源在windows平台下相关的一部分知识,所有测试代码都尽可能的依赖win32 API实现.更全面的知识,参考文末列出的”参考资料“. 关键字:I ...
- Android下的xml资源详解
最近遇到的bitmap资源 <?xml version= "1.0" encoding ="utf-8"?> <bitmap xmlns:an ...
随机推荐
- vue axios----基于 Promise 的 HTTP 请求
vue axiosvue2.0之axios接口請求管理功能特性axios API開始使用get請求post请求多个请求并发拦截器移除一个拦截器:自定义的 axios 实例添加拦截器:vue2.0之ax ...
- ubuntu 16.04 pecl 不能安裝 mcrypt
vagrant@ubuntu-xenial:/etc/apt$ sudo pecl install mcrypt-1.0.1 downloading mcrypt-1.0.1.tgz ... Star ...
- linux服务器创建docker
关于Docker在Linux服务器中的安装以及使用1 安装: yum install docker 2 启动: systemctl start docker.service 3.加入开机启动: sys ...
- Burnside引理&Pólya定理
Burnside's lemma 引例 题目描述 一个由2*2方格组成的正方形,每个格子上可以涂色或不涂色, 问共有多少种本质不同的涂色方案. (若两种方案可通过旋转互相得到,称作本质相同的方案) 解 ...
- javabean 深拷贝
<!-- https://mvnrepository.com/artifact/uk.com.robust-it/cloning --> <dependency> <gr ...
- __init__初始化方法
使用场景:多个对象(由同一个类产生)的属性同名且值都一样,这时就需要使用init()方法. # 多个对象(由同一个类产生)的属性同名且值都一样,这时就需要使用__init__()方法. # class ...
- 基于Netty的RPC架构学习笔记(十一):粘包、分包分析,如何避免socket攻击
文章目录 问题 消息如何在管道中流转 源码解析 AbstractNioSelector.java AbstractNioWorker.java NioWorker.java DefaultChanne ...
- eclipse导入别人项目配置tomcat和jdk
1.file--import--General--Existing Projiect into Workspace-- 2.导入项目成功后,项目会有错误,需重新进行tomcat及jdk的配置 项目名右 ...
- springboot项目大量打印debug日志问题
目前,java下应用最广泛的日志系统主要就是两个系列: log4j和slf4j+logback . 其中,slf4j只包含日志的接口,logback只包括日志的具体实现,两者加起来才是一个完整的日志系 ...
- 天道神诀---防火墙以及selinux(上篇)
Linux防火墙 linux6.x 防火墙会影响通信,默认是拒绝所有. [root@redhat6 sysconfig]# chkconfig iptables --listiptables ...