Visual C++.NET编程讲座之四

第3讲 菜单、工具栏和状态栏之间的交互

摘要

本讲先来用资源编辑器对菜单和工具栏进行可视化设计,然后讨论命令消息的COMMAND和UPDATE_COMMAND_UI消息映射,并说明了工具按钮和菜单命令的联动方法,最后讨论工具栏的显示和隐藏、快捷菜单的实现,以及在状态栏上如何显示指定文本的方法。

菜单的可视化设计及其命令映射

在上一讲中,我们主要讨论了文档数据的读取和显示,在这里我们先来打开上一讲中的单文档应用程序项目Viewer,然后对其菜单和工具栏进行设计。需要说明的是,Visual C++ .NET把Windows各种应用程序所需要的图形元素,例如菜单、工具栏、对话框、图标、光标等,作为可以装入应用程序的资源来存放。例如,Visual C++.NET将Viewer应用程序的资源都存放在Viewer.rc文件中,这种资源同源代码相分离的机制,能大大方便用户的操作,而且每一个资源元素都用相应的资源ID号来标识。

1. 菜单的可视化设计

在菜单设计之前,我们先了解一下菜单及其设计规范。

菜单可以有多级结构,即一个菜单项可以有多个子菜单,而一个子菜单又可以包含多个下一级的子菜单,依此类推。但在菜单实际设计时,菜单的级数一般以2~3级为宜,而且设计时还要注意一些菜单原则。例如,若单击某菜单项会弹出一对话框,那么在该菜单项文本后加上"…";若菜单项需要助记符(带下划线的字符),则用括号将其括起来,对于顶层菜单项来说,当按住"Alt"键不放,再按助记符所对应的字符键时,对应的顶层菜单就会被打开,若子菜单项还有助记符,则只要按对应的字符键,则可执行该菜单命令;定义助记符时,只要在字符前面加上"&"符号即可;若某项菜单需要快捷键的支持,则一般将其列在相应菜单项文本之后。

下面为Viewer项目添加一个"格式"菜单,其下有两个菜单项。一个是"设置字体"菜单,另一个是"文本颜色"菜单,分别用来改变文本显示的字体和颜色。具体步骤如下:

(1) 将解决方案资源管理器切换到"资源视图",若没有该标签,则打开"视图"菜单,选择"资源视图"菜单命令即可。

(2) 展开资源所有节点,双击Menu下的IDR_MAINFRAME,打开该程序的菜单资源。需要说明的是,凡是标识为IDR_MAINFRAME的资源均是程序框架加装的默认资源。

(3) 如图1所示,单击顶层菜单最右边的"请在此处输入",直接按Insert键或右击"请在此处输入",在弹出的菜单中单击"新插入"。再单击"请在此处输入",该位置就会变成一个可编辑的文本框,出现了插入符。键入菜单文本内容"格式(&M)",然后按Enter键。

图1 顶层菜单资源

(4) 单击"格式(&M)"菜单项下方的"请在此处输入",按Insert键,键入菜单文本内容"设置字体(&F)",然后按Enter键。

(5) 单击"设置字体(&F)",在右下角的属性窗口中就会列出其所有的属性,如图2所示。需要说明的是,在属性窗口中,我们可以重新编辑菜单的文本内容和资源标识ID。Caption(标题)属性是用来标识菜单项显示文本,如果使用助记符,则字母的前面须有一个&符号;当Popup(弹出)属性为True时表示该菜单项是一个弹出式菜单,即该菜单下还有多个子菜单,此时属性ID、Separator和Prompt项无效;因此,若添加的是一个可以映射的菜单命令,则Popup属性一定要设为False。当Separator(分隔符)属性为True时表示菜单项是一个分隔符或是一条水平线;而Prompt(提示)属性用来指明鼠标指针移至该菜单项时在状态栏上显示的提示信息。

图2 菜单属性

(6) 将默认的菜单项"设置字体(&F)"标识ID_130改为ID_FOMAT_TXTFONT。更改时直接在属性窗口中的ID栏右侧的框中进行编辑,修改后按Enter键。

(7) 重复上述步骤,在"格式"菜单下再添加一个菜单项"文本颜色(&C)",ID为ID_FORMAT_TXTCOLOR,结果如图3所示。

图3 添加的菜单

(8) 单击"格式"菜单不松开,然后将其拖放到"视图"和"帮助"之间。

2. 菜单的命令映射

此时运行程序,则"格式"菜单下的命令都是"灰显"(即显示的颜色是灰色的)的,我们无法选择相应的菜单命令,这是因为我们还没有对菜单的命令消息进行映射。下面就来进行映射,由于我们添加的这些菜单命令是想更改变文本内容显示的字体,因此我们将菜单命令的映射添加到视图类CViewerView中,如下面的过程:

(1) 将解决方案资源管理器切换到"类视图",展开节点,选定"CViewerView",在其属性窗口中,单击"事件"按钮,结果如图4所示。

图4 事件映射

(2) 找到前面添加的菜单项ID_FORMAT_TXTFONT,单击该ID前面的"+",展开后出现可以映射的消息,由于菜单消息是命令消息,因为我们在COMMAND消息框的右侧,单击后选择"<添加>OnFormatTxtfont",如图4所示。这样相应的映射就被添加到CViewerView类中,此时文档窗口中自动定位到该函数的实现代码处。

图5 映射COMMAND消息

(3) 重复上一步为菜单项ID_FORMAT_TXTCOLOR添加COMMAND消息映射。

注意:同一命令消息的响应是根据对象的级别来决定的,对于单文档应用程序来说,各对象的级别从高到低依次为视图类(文档窗口)、文档类、主框架窗口类、应用程序类。

3. 完善"格式"菜单代码

(1) 为CViewerView类添加两个成员变量(添加成员变量的方法上一讲已讨论过),一个是LOGFONT类型的m_lfTextFont,另一个是COLORREF类型的m_crTxtColor。LOGFONT是逻辑字体类型,所谓"逻辑字体",它是应用程序对于理想字体的一种描述方式。在使用逻辑字体绘制文字时,系统会采用一种特定的算法把逻辑字体映射为最匹配的物理字体(实际安装在操作系统中的字体)。而COLORREF是专门用来定义RGB颜色的数据类型,RGB颜色是通过红(R)、绿(G)、蓝(B)三种基色分量的不同值混合而成的。

(2) 在构造函数CViewerView::CViewerView()中添加上述两个成员变量的初始化代码,如图5所示。

图5 在CViewerView类构造函数中添加的代码

(3) 在CViewerView::OnFormatTxtfont()函数中添加如图6所示的代码。

图6 OnFormatTxtfont()函数代码

CFontDialog类为我们提供了字体及其文本颜色选择的通用对话框,在构造对象中指定m_lfTextFont指针,其目的是用来设置对话框显示的逻辑字体,这样当下一次显示字体对话框时,就会显示当前的字体特性。

(4) 在CViewerView::OnFormatTxtcolor()函数中添加如图7所示的代码。

图7 OnFormatTxtcolor()函数代码

CColorDialog类封装了通用颜色对话框的全部操作。在定义对话框对象时,可以指定默认选定的颜色值,若不指定,则默认颜色值为RGB(0,0,0)(黑色)。

(5) 修改CViewerView::OnDraw()函数代码,如图8所示的加框部分。

图8 修改后的OnDraw()函数代码

(6) 运行程序,打开当前目录中的ReadMe.txt文档,打开"格式"菜单,选中相应的菜单命令,改变其字体和颜色。图9是其中的一个结果。

图9 运行后的程序结果

时间: 2024-08-02 08:06:15

Visual C++.NET编程讲座之四的相关文章

Visual C++.NET编程讲座之五

第4讲 对话框的界面世界 摘要 本讲先来讨论对话框界面设计的一般过程和技巧,然后创建对话框类并用模式和无模式的方式来显示对话框. 对话框的界面设计过程 对话框是Windows应用程序中最重要的用户界面元素之一,它是通过对话框上的各种控件来和用户进行交互的.所谓"控件",是指具有一定功能的界面单元,如按钮.编辑框.列表框.组合框等.在这里,我们先来讨论对话框的界面设计过程. 1. 添加对话框资源 (1) 启动Visual Studio .NET,打开上一讲的单文档应用程序项目Viewer

Visual C++.NET编程讲座之七

摘要 本讲先来介绍MFC中的"一档多视"模式,并为Viewer添加一个用于显示Web页的视图CWebView,然后讨论两种比较常用的单文档视图的切换方法,最后对这两种方法进行分析和比较. MFC"一档多视"模式 我们知道,MFC应用程序用一种编程模式使程序中数据与它的显示形式和用户交互分离开来,这种模式就是"文档/视图结构".在单文档应用程序结构中,一个文档对应于一个视图.但有时一个文档可能需要多个视图以改变文档数据的显示方式,称为"一

Visual C++.NET编程讲座之八

程序的安装和部署 摘要 本文先来介绍安装和部署前的准备,然后用向导创建一个安装和部署项目,并修改项目的属性,最后讨论如何使用自己的标题图像.添加"序列号"对话框及生成程序菜单项和桌面图标. 安装和部署前的准备 一旦应用程序项目开发好了之后,就要创建一个安装程序供用户进行安装.早期的安装程序大多数是使用InstallShield来制作的,InstallShield一个最大的特点是可以使用其内嵌的脚本语言InstallScript来定制自己的安装过程和安装界面.不过,现在我们还有一个更简便

Visual C++.NET编程讲座之六

第六讲 对话框的功能实现 对话框就好比是一个容器,只有将一些控件添加在这个容器中,才能实现用户与对话框之间的交互.下面我们将前面的对话框设计成如图13所示的界面,其功能是用来让用户调整视图客户区的背景颜色,设置的效果可在下方的矩形框中预览. 图13 设计的"设置"对话框 1. 界面实现的技巧 在图13所示的对话框中所用到的控件有:组框 .静态文本 .编辑框 .旋转控件 和图片控件 . 需要说明的是: ① "静态文本"."组框"和"图片控

.NET 4 并行(多核)编程系列之四 Task的休眠

原文:.NET 4 并行(多核)编程系列之四 Task的休眠 .NET 4 并行(多核)编程系列之四 Task的休眠 前言:之前的几篇文章断断续续的介绍了Task的一些功能:创建,取消.本篇介绍Task的休眠,本篇的内容比较的少. 本篇的议题如下: 1.       Task的休眠.   系列文章链接: .NET 4 并行(多核)编程系列之一入门介绍 .NET 4 并行(多核)编程系列之二 从Task开始  .NET 4 并行(多核)编程系列之三 从Task的取消  .NET 4 并行(多核)编

098_《Delphi5高级编程丛书之四:COM、CORBA与Internet编程》

<Delphi5高级编程丛书之四:COM.CORBA与Internet编程> Delphi 教程 系列书籍 (098) <Delphi5高级编程丛书之四:COM.CORBA与Internet编程> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Part1 Part2 Part3 Part4 作者: 徐新华 出版社: 人民邮电出版社 书号: 7115084963 出版日期:2000年5月 开本: 787*1092 1/16 页码: 392 版次: 2000

《Visual Basic 2012入门经典》----第1章 全身心投入:Visual Basic 2012编程之旅 1.1 开始使用Visual Basic 2012

第1章 全身心投入:Visual Basic 2012编程之旅 Visual Basic 2012入门经典在本章中,读者将学习: 创建一个简单但有一定功能的Visual Basic应用程序:让用户浏览硬盘:显示硬盘中的图片:熟悉一些编程术语:学习Visual Studio 2012 IDE.学习一门新的编程语言因其难度可能使人望而却步.如果您从来没有编写过程序,那么输入有些神秘的文本就可以产生精美的.功能强大的应用程序,这种行为对您来说可能就像一种魔法,您可能会想知道如何才能学会需要掌握的东西.

多线程在Visual C#网络编程中的应用

visual|编程|多线程|网络 网络应用程序的一般都会或多或少的使用到线程,甚至可以说,一个功能稍微强大的网络应用程序总会在其中开出或多或少的线程,如果应用程序中开出的线程数目大于二个,那么就可以把这个程序称之为多线程应用程序.那么为什么在网络应用程序总会和线程交缠在一起呢?这是因为网络应用程序在执行的时候,会遇到很多意想不到的问题,其中最常见的是网络阻塞和网络等待等. 程序在处理这些问题的时候往往需要花费很多的时间,如果不使用线程则程序在执行时的就会表现出如运行速度慢,执行时间长,容易出现错

vb.Net编程简介之四

编程 Windows APIs    大多数的API调用可以象在Visual Basic 6.0中一样使用,因为数据类型发生了改变.在Visual Basic 6.0中的Long类型在Visual Basic.NET中定义为Integer类型.在升级过程中这些定义会自动改变,例如: Private Declare Function GetVersion Lib "kernel32" () As LongFunction GetVer()    Dim Ver As Long    Ve