当前位置: 首页 > news >正文

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

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

       菜单简介

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

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

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

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

       VS2010菜单资源详解

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

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

VS2010菜单资源

       上边包含“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,如下图:

VS2010 Accelerator

       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菜单资源编辑

       本节内容就是这些了,主要是关于菜单的一些基础知识,比较好理解。鸡啄米欢迎大家继续关注VS2010/MFC编程入门教程,关注本网站。

 

原文地址:http://www.jizhuomi.com/software/210.html

转载于:https://www.cnblogs.com/wodehao0808/p/6758527.html

相关文章:

  • Thread入门
  • 二叉树的遍历:先序,中序,后序,递归,非递归,层次遍历
  • 申请Google API Key的方法(Debug版本)
  • 转:【C/C++】结构体和联合体的区别
  • shell--传入参数的处理
  • 日期格式化
  • 顺时针螺旋递减等差数列矩阵
  • MVC DataTable转ArrayList转JSON返回JSON到页面
  • 自定义控件自动出现在工具栏
  • 中庸之道别解,读《幸福超越完美》——leo鉴书(13)
  • mvc:argument-resolvers 自定义注解处理参数
  • Android下实现GPS定位服务
  • 数字转化为汉字,如5-五
  • 用Thread做点自动化的事
  • 201521123042 《Java程序设计》 第10周学习总结
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • C# 免费离线人脸识别 2.0 Demo
  • download使用浅析
  • IndexedDB
  • java中的hashCode
  • java中具有继承关系的类及其对象初始化顺序
  • JDK 6和JDK 7中的substring()方法
  • Kibana配置logstash,报表一体化
  • k个最大的数及变种小结
  • Protobuf3语言指南
  • socket.io+express实现聊天室的思考(三)
  • Spring核心 Bean的高级装配
  • vue2.0项目引入element-ui
  • 多线程事务回滚
  • 小程序开发中的那些坑
  • 原生Ajax
  • 最简单的无缝轮播
  • 如何正确理解,内页权重高于首页?
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (145)光线追踪距离场柔和阴影
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)平衡树
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET : 在VS2008中计算代码度量值
  • .NET Core引入性能分析引导优化
  • .NET6实现破解Modbus poll点表配置文件
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET学习教程二——.net基础定义+VS常用设置
  • .NET运行机制
  • /etc/sudoers (root权限管理)