05vc电子教案-北大版_第1页
05vc电子教案-北大版_第2页
05vc电子教案-北大版_第3页
05vc电子教案-北大版_第4页
05vc电子教案-北大版_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 5 章 菜单、工具栏和状态栏 Visual C+程序设计教程5.1 资源与资源编辑器 5.2 菜单的使用 5.3 工具栏的使用 5.4 状态栏的使用 5.5 上机指导15.1 资源与资源编辑器 第5章 菜单、工具栏和状态栏 Windows资源用于创建程序的框架界面,包括快捷键(Accelerator)、位图(Bitmap)、光标(Cursor)、对话框(Dialog)、图标(Icon)、菜单(Menu)、串表(String Table)、工具栏(Toolbar)和版本信息(Version)等,为此,Windows资源提供了各种类型的资源编辑器。25.1.1 资源与资源编辑器 第5章 菜单、

2、工具栏和状态栏 资源作为一种界面元素,可以从中获取信息并在其中执行某些操作。Visual C+在内部使用资源符号来标识资源。每当创建一个新的资源或资源对象时,系统就会为其提供一个默认的资源符号名称并赋予一个整数值,该定义被保存在resource.h文件中。 在同一项目中,资源符号不能重复。资源符号的命名通常用带有描述性的前缀来表示所代表的资源,表5-1是Visual C+ 6.0中所提供的一些常用资源符号的前缀。3第5章 菜单、工具栏和状态栏 4第5章 菜单、工具栏和状态栏 5.1.2 资源编辑器 在Windows环境下,资源是独立于程序源代码的,根据不同资源的特点,Visual C+提供了不

3、同的可视化资源编辑器。创建或打开资源时,系统将自动打开相应的编辑器。1.创建资源 可以通过在Insert菜单中选择Resource菜单项来创建新的资源。单击Resource菜单项,弹出Insert Resource对话框,如图5.1所示。5第5章 菜单、工具栏和状态栏 6第5章 菜单、工具栏和状态栏 2编辑资源 可以通过项目工作区窗口的ResourceView视图来查看资源。在窗口中双击要查看的资源,即可打开相应的资源编辑器。 使用资源编辑器可以查看资源,使用资源模板,导入、导出资源以及查看、设置资源的属性。7第5章 菜单、工具栏和状态栏 (1)图形编辑器 主要用于绘制位图、图标、光标和工具条

4、。双击ResourceView视图中的Icon图标资源或Bitmap位图资源,都可以打开图形编辑器,如图5.2所示。8第5章 菜单、工具栏和状态栏 (2)串表(String Table)编辑器 运行一个Windows应用程序后,当鼠标指向菜单项和工具栏按钮时,在底部状态栏将显示所指项的有关提示信息,串表就是这样一种资源字符串。使用串表编辑器可以对串表进行增加、删除及编辑等操作,如图5.3所示。9第5章 菜单、工具栏和状态栏 (3) 版本(Version)编辑器 版本信息包括公司和产品的信息、语言、序列号、产品的操作系统、版权号和商标的声明。版本编辑器用于编辑上述信息,如图5.4所示。10第5章

5、 菜单、工具栏和状态栏 【例5.1】 编写一个单文档应用程序Li5_1,使用资源编辑器编辑图标、串表和版本信息。115.2 菜单的使用 第5章 菜单、工具栏和状态栏 5.2.1 菜单的类型 在一个Windows应用程序中,常见的菜单类型有3种:主菜单、弹出菜单和快捷菜单。1.主菜单 主菜单是指出现在应用程序主窗口或最上层窗口的菜单。菜单名指出一组菜单项命令的主要功能和目标。常见的顶层菜单有:File、Edit、Windows、Help等。一个菜单项是可选择或可执行的,每一个菜单对应一个确定的功能。通常,每个主菜单项对应有一个弹出菜单作为它的子菜单。12第5章 菜单、工具栏和状态栏 2.弹出菜单

6、 弹出菜单通常是指选择主菜单或一个菜单项时弹出的子菜单。用户可以定义多重嵌套的弹出式菜单,菜单项右边的三角符号表示有子菜单存在。可以通过放置分隔线对逻辑或功能上紧密相关的菜单项分组。3.快捷菜单 当右击某个界面对象时,通常会弹出快捷菜单,它出现在鼠标箭头的位置,快速展示当前对象可用的命令功能,免除在菜单中一一查找的麻烦。13第5章 菜单、工具栏和状态栏 5.2.2 编辑菜单 使用菜单编辑器来编辑菜单资源。双击ResourceView视图中的Menu菜单资源,即可打开菜单编辑器,如图5.6所示。14第5章 菜单、工具栏和状态栏 1.插入新菜单项 如果在当前空白菜单项位置插入,则选定窗口中的空白菜

7、单项后按回车键(或双击空白菜单项),系统弹出Menu Item Properties对话框。 如果要在某菜单项前插入,选中该菜单项并按Ins键,菜单编辑器将在该菜单项前插入一个空白菜单项,然后双击该空白菜单项进行编辑。15第5章 菜单、工具栏和状态栏 2.属性对话框的设置 菜单项属性对话框用于输入菜单项的标识符(ID)、标题(Caption)和菜单项在状态栏上显示的提示(Prompt)信息,并为该菜单项提供属性调整。16第5章 菜单、工具栏和状态栏 3.调整菜单项位置 选中某菜单项将其拖至适当位置即可。4.删除菜单项 用鼠标单击菜单项或用上、下、左、右光标键选择菜单项,然后单击Cut按钮或按D

8、el键删除。在删除带有下拉菜单的菜单项时,系统会弹出一个信息提示框,提醒用户该操作将删除下拉菜单以及它所包含的全部内容。17第5章 菜单、工具栏和状态栏 【例5.2】编写一个单文档应用程序Li5_2,在主菜单中增加一个“绘图”菜单项,并在其中添加【图形类型】、【线框图】、【填充图】和【线框/填充切换】4个菜单项。其中【图形类型】菜单项又带有【矩形】和【椭圆】两个子菜单。18第5章 菜单、工具栏和状态栏 5.2.3 建立消息映射 在例5.2中仅添加了菜单,并没有实现菜单的功能,即没有对应的命令处理函数与菜单项对应,因此,添加的菜单项是灰色的,即处于当前不可用状态。添加新的菜单项后,还应该为菜单项

9、指定一个处理函数,即利用ClassWizard类向导添加一个消息处理函数。19第5章 菜单、工具栏和状态栏 【例5.3】 为例5.2的程序Li5_2增加的菜单项添加消息处理函数。20第5章 菜单、工具栏和状态栏 5.2.4 菜单的有效控制 一般情况下,菜单项都不止一种状态,我们经常需要根据应用的内部状态来对菜单项作相应的改变。例如,在我们没有选择任何内容时,Edit菜单下的Copy、Cut等菜单项是无效的(灰色显示)。有时,我们还会看到,在菜单项旁边可能还会有检查标记,表示它是选中的还是不选中的。比如,在Word的视图菜单项下,当用户选用【网格线】或【标尺】时,相应菜单项前会出现一个“”。 M

10、FC通过消息映射机制和CCmdUI类更新菜单项的显示。21第5章 菜单、工具栏和状态栏 在类向导ClassWizard的Message Map标签中,如果选择一个菜单ID,在Messages列表框中就会出现以下两项:COMMANDUPDATE_COMMAND_UI 其中UPDATE_COMMAND_UI是更新命令用户接口消息,专门用于处理菜单项和工具条按钮的更新。22第5章 菜单、工具栏和状态栏 【例5.4】为例5.3的程序Li5_2添加更新用户界面的消息处理函数,完成以下功能:当程序启动时,菜单项【线框图】、【填充图】和【线框/填充切换】处于不可用状态;当用户单击菜单项【矩形】或者【椭圆】时

11、,菜单项变为可用;当用户单击【线框图】或者【填充图】菜单项时,在菜单项前显示 “” 标记。23第5章 菜单、工具栏和状态栏 5.2.5 使用快捷菜单 菜单分为两类,除了前述的依附于框架窗口的一般菜单之外,另一类是浮动的弹出式菜单,也称快捷菜单或上下文菜单。 当用户右击鼠标,弹出式菜单就会出现在光标所在位置。为应用程序创建快捷菜单主要有以下两种方法。24第5章 菜单、工具栏和状态栏 1.使用Component Gallery创建快捷菜单 Component Gallery(组件画廊)是一个组件库,它保存着可以共享或重用的代码。这些代码包括由Visual C+自带的组件和从用户工程中增加到Gall

12、ery中去的用户自定义组件。25第5章 菜单、工具栏和状态栏 【例5.5】 为例5.4中的应用程序Li5_2增加一个快捷菜单。程序运行后,用户在视图窗口中右击,弹出一个快捷菜单,显示主菜单“绘图”下的所有菜单项。26第5章 菜单、工具栏和状态栏 2.使用TrackPopupMenu( )函数创建快捷菜单 使用菜单资源编辑器和CMenu:TrackPopupMenu( )函数来创建右键快捷菜单。 CMenu:TrackPopupMenu函数的原型为:BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect=NULL

13、); 该函数的功能是显示一个右键快捷菜单。其中,nflags表示屏幕位置标志。x、y分别表示菜单的水平坐标和顶端的垂直坐标;pWnd表示弹出菜单的窗口,包括全部的WM_COMMAND消息;lpRect表示一个矩形域,当单击这个矩形域时菜单不消失。27第5章 菜单、工具栏和状态栏 【例5.6】 使用TrackPopupMenu( )函数创建例5.5中的快捷菜单。28第5章 菜单、工具栏和状态栏 5.2.6 创建动态菜单 动态创建菜单可以减少内存空间占用,节省系统资源。动态创建菜单分为以下3个步骤。(1)利用CreateMenu( )函数创建一个空的弹出式菜单,该函数的原型为: HMENU Cre

14、ateMenu() 该函数没有参数,它的返回值是一个菜单句柄。 (2)调用AppendMenu( )或InsertMenu( )函数在菜单中加入菜单项。 (3)调用函数SetMenu( )加载动态菜单。29第5章 菜单、工具栏和状态栏 【例5.7】为例5.6中的应用程序Li5_2创建【画笔】和【画刷】两个动态菜单。程序运行后,用户首先单击【绘图】|【图形类型】菜单项选择图形的类型,然后选择图形的显示模式(线框图或填充图)。当用户单击【线框图】菜单项时,在主菜单中添加动态菜单【画笔】,则可用不同的线型绘制图形;当用户单击【填充图】菜单项时,在主菜单中添加动态菜单【画刷】,此时则可用不同的阴影样式

15、绘制图形。30第5章 菜单、工具栏和状态栏 5.2.7 创建基于对话框的菜单 从第2章可知,利用MFC AppWizardexe向导工具可以生成基于对话框的应用程序。 基于对话框的应用程序在运行时并没有菜单栏。下面我们通过实例来讨论如何给它创建一个菜单。 31第5章 菜单、工具栏和状态栏 【例5.8】 编写一个基于对话框的应用程序Li5_8,为该应用程序添加一个菜单。菜单包括【文件】、【编辑】、【视图】和【帮助】4个主菜单项。32第5章 菜单、工具栏和状态栏5.3 工具栏的使用 在MFC中,工具栏的功能由类CToolBar实现。工具栏资源和工具栏类CToolBar是工具栏的两个要素。创建工具栏

16、的基本步骤是:l 创建工具栏资源;l 构建一个CToolBar对象;l调用CToolBar:Create( )或CreateEx( )函数创建工具栏窗口;l 调用CToolBar:LoadToolBar载入工具栏资源。33第5章 菜单、工具栏和状态栏5.3.1 编辑工具栏 使用工具栏编辑器来编辑工具栏资源。双击ResourceView视图中的Toolbar工具栏资源,即可打开工具栏编辑器。 34第5章 菜单、工具栏和状态栏2.删除按钮 将按钮拖出工具栏外,即可删除该按钮。3.编辑按钮位图 设置按钮位图有以下两种方法。l 利用绘图工具与调色板直接进行绘制。l 先利用专用绘图软件制作,然后粘贴到按

17、钮上。35第5章 菜单、工具栏和状态栏5.3.2 建立消息映射 通常,只需让一个按钮的ID值与同样功能菜单项的ID值相同即可。如果按钮没有对应菜单项,则必须利用ClassWizard类向导添加一个消息处理函数。36第5章 菜单、工具栏和状态栏【例5.9】 编写一个单文档应用程序Li5_9。删除默认工具栏上的【打印设置】按钮,并在【帮助】按钮前添加【上一页】和【下一页】2个按钮,当用户单击这两个按钮后,视图中分别显示文本“这是上一页按钮!”和“这是下一页按钮!”。37第5章 菜单、工具栏和状态栏5.3.3 自定义工具栏的操作 向导生成的标准工具栏的ID值为IDR_MAINFRAME。对一些功能复

18、杂的应用程序,需要创建多个不同的工具栏。要生成工具栏,首先必须添加工具栏资源,然后参照MFC应用程序框架添加工具栏的方法,构造一个CToolBar类的对象,调用CToolBar:Create( )或CreateEx( )函数创建工具栏窗口,最后调用CToolBar:LoadToolBar( )函数载入工具栏资源。除这些基本步骤之外,还可以调用其他相关函数从而进一步改善工具栏。38第5章 菜单、工具栏和状态栏1.创建工具栏窗口 调用CToolBar:Create( )或CreateEx( )函数创建并初始化工具栏窗口对象。若创建成功,函数返回TRUE,否则返回FALSE。2.装载工具栏资源 调用

19、LoadToolBar( )函数装载工具栏资源。用Create( )或者CreateEx( )函数创建工具栏,其实只是获得了一个窗口句柄,工具栏窗口中位图按钮的加载是靠LoadToolBar( )函数来完成的。若加载成功,将返回TRUE,否则返回FALSE。39第5章 菜单、工具栏和状态栏3.设置工具栏风格 如果在调用初始化函数CToolBar:Create( )或者CreateEx( )时设置的工具栏风格不满足需要,可以再用SetBarStyle( )函数重新进行设置。4.设置工具栏停靠特性 设置工具栏停靠特性,需要调用EnableDocking( )函数。既要调用CControlBar:

20、EnableDocking( )函数设置工具栏的停靠特性,还要调用框架类的成员函数EnableDocking( )函数来设置框架窗口以允许它的子窗口控制栏可以以何种方式停靠。不管一个框架窗口中有多少个子窗口控制栏,该函数只需调用一次。40第5章 菜单、工具栏和状态栏5. 设置工具栏的初始停靠位置 通过调用CFrameWnd:DockControlBar( )函数定位一个工具栏的初始停靠位置。6.移动工具栏 调用CFrameWnd:FloatControlBar( )函数来移动、定位一个工具栏。7. 工具栏隐显控制 通过对函数CWnd:SetStyle( )的调用可以改变某些工具栏窗口的风格,但

21、该函数不能改变WS_VISIBLE,只能通过父类CWnd的ShowWindow( )成员函数来显示或隐藏工具栏。 41第5章 菜单、工具栏和状态栏【例5.10】 编写一个单文档应用程序Li5_10。为该应用程序创建一个带有“线”、“圆”、“矩形”和“文本”4个按钮的工具栏,当用户单击工具栏上的按钮时,在窗口中显示相应的图形。 42第5章 菜单、工具栏和状态栏5.4 状态栏的使用 状态栏实际上是一个窗口,一般分为几个窗格,每个窗格显示不同的信息。使用AppWizard创建一个单文档应用程序,其他接受默认选项时,生成的应用程序自动创建带有默认窗格的状态栏。43第5章 菜单、工具栏和状态栏5.4.1

22、 状态栏类的继承关系 在MFC中,状态栏的功能由CStatusBar类实现。44第5章 菜单、工具栏和状态栏5.4.2 状态栏类的成员函数 45第5章 菜单、工具栏和状态栏5.4.3 状态栏操作 利用MFC AppWizard向导创建应用程序时,首先在CMainFrame类中定义一个成员变量m_wndStatusBar,它是状态栏类CStatusBar的对象。其次在MFC应用程序框架的实现文件MainFrm.cpp中,为状态栏定义一个静态数组indicators,如下所示:static UINT indicators = ID_SEPARATOR, /显示命令功能提示 ID_INDICATOR

23、_CAPS, /显示大写锁定键状态 ID_INDICATOR_NUM, /显示数字锁定键状态 ID_INDICATOR_SCRL, /显示滚动锁定键状态;46第5章 菜单、工具栏和状态栏 这个全局的提示符数组indicators中的每个元素代表状态栏上一个窗格的ID值,这些ID在应用程序的串表资源String Table中进行了说明。通过增加新的ID标识来增加用于显示状态信息的窗格。状态栏显示的内容由数组indicators决定,需要在状态栏中显示的各窗格的标识符、位置以及个数也由该数组决定,状态栏显示的内容是可以修改的。 最后CWnd:Create( )函数以主框架窗口为父窗口创建状态栏,创建后默认停靠在主框架窗口的底部。CWn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论