《第6章 菜单工具栏与状态栏.ppt》由会员分享,可在线阅读,更多相关《第6章 菜单工具栏与状态栏.ppt(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第 6 6 章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 6.1 6.1 菜单菜单 6.2 6.2 工具栏工具栏 6.3 6.3 状态栏状态栏 1Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 6.1 6.1 菜单菜单 6.1.1 6.1.1 菜单的类型菜单的类型 常见菜单有常见菜单有3 3种种:主菜单、弹出菜单和快捷菜单主菜单、弹出菜单和快捷菜单。1.1.主菜单主菜单 指指出出现现在在应应用用程程序序主主窗窗口口或或最最上上层层窗窗口口的的菜菜单单。通常对应有一个弹出菜单作为它的子菜单。通常对应有一个弹出菜单作为它的子菜单。2Visu
2、al C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 2.2.弹出菜单弹出菜单指指选择主菜单或一个菜单项时弹出的子菜单选择主菜单或一个菜单项时弹出的子菜单。3.3.快捷菜单快捷菜单 当当右右击击某某个个界界面面对对象象时时,通通常常会会弹弹出出快快捷捷菜菜单单,它它出出现现在在鼠鼠标标箭箭头头的的位位置置,快快速速展展示示当当前前对对象象可可用用的的命令功能命令功能。3Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 菜单设计一般需要经过下面两步菜单设计一般需要经过下面两步:(1)(1)使用菜单编辑器编
3、辑菜单资源使用菜单编辑器编辑菜单资源;(2)(2)使用使用ClassWizardClassWizard进行消息映射,编辑成员函进行消息映射,编辑成员函数,完成菜单所要实现的功能数,完成菜单所要实现的功能。4Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 6.1.2 编辑菜单编辑菜单 使使用用菜菜单单编编辑辑器器来来编编辑辑菜菜单单资资源源。双双击击ResourceViewResourceView视图中的视图中的MenuMenu菜单资源,打开菜单编辑器。菜单资源,打开菜单编辑器。5Visual C+程序设计31-Dec-22第第6 6章章 菜
4、单、工具栏与状态栏菜单、工具栏与状态栏 1.1.插入新菜单项插入新菜单项在当前空白菜单项位置插入在当前空白菜单项位置插入选选定定窗窗口口中中的的空空白白菜菜单单项项后后按按回回车车键键(或或双双击空白菜单项击空白菜单项),系统弹出菜单属性对话框。,系统弹出菜单属性对话框。在某菜单项前插入在某菜单项前插入选选中中该该菜菜单单项项并并按按InsIns键键,再再双双击击该该空空白白菜菜单项进行编辑。单项进行编辑。6Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 2.2.属性对话框的设置属性对话框的设置 用用于于输输入入菜菜单单项项的的标标识识符符
5、(ID)(ID)、标标题题(Caption)(Caption)和和菜菜单项在状态栏上显示的单项在状态栏上显示的提示提示(Prompt)(Prompt)信息等信息等。菜单项的标菜单项的标识符识符(ID)(ID)菜单项在状态栏上菜单项在状态栏上显示的提示信息显示的提示信息标题标题7Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 8Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 3.3.调整菜单项位置调整菜单项位置 选中某菜单项将其拖至适当位置。选中某菜单项将其拖至适当位置。4.4.删除菜单项
6、删除菜单项 用用鼠鼠标标单单击击菜菜单单项项或或用用上上、下下、左左、右右光光标标键键选择菜单项,然后单击选择菜单项,然后单击CutCut按钮或按按钮或按DelDel键删除。键删除。9Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 【例例6.1】编编写写一一个个单单文文档档应应用用程程序序MyDraw,在在菜菜单单栏栏中中增增加加一一个个“绘绘图图”主主菜菜单单,并并在在其其中中添添加加“矩矩形形”和和“椭圆椭圆”两两个菜个菜单项。单项。(1)利利用用MFCAppWizardexe向向导导生生成成一一个个项项目目名名为为MyDraw的单文档
7、应用程序的单文档应用程序。(2)增加增加“绘图绘图”主菜单。主菜单。打打开开ResourceView视视图图中中的的Menu文文件件夹夹,双双击击IDR_MAINFRAME打打开开菜菜单单编编辑辑器器。双双击击菜菜单单栏栏右右侧侧的的虚虚线线空空白白菜菜单单项项,弹弹出出菜菜单单项项属属性性对对话话框框,在在Caption栏中输入栏中输入“绘图绘图(&D)”。其他采用系统默认值。其他采用系统默认值。10Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 双击打开菜单编辑器双击打开菜单编辑器双击打开菜单项属性对话框双击打开菜单项属性对话框菜单项名
8、称,菜单项名称,&表示在表示在字母字母D下加下划线下加下划线11Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (3)为主菜单增加菜单项为主菜单增加菜单项右右击击“绘绘图图”菜菜单单项项下下的的虚虚线线空空白白菜菜单单项项,在在弹弹出出的的快快捷捷菜菜单单中中选选择择Properties,打打开开菜菜单单项项属属性性设设置置对对话话框框。在在ID栏栏中中输输入入ID_RECTANGLE,Caption栏栏中中输输入入“矩矩形形(&R)tCtrl+R”,Prompt栏栏中中输输入入“在在视视图图中中绘绘制制矩矩形形n矩矩形形”。用用同同样样的
9、的方方法法添添加加“椭椭圆圆”子子菜菜单单项项,它它的的ID、Caption和和Prompt分分别别为为ID_ELLIPSE、椭椭圆圆(&L)tCtrl+L、在在视视图图中中绘绘制制椭椭圆圆n椭椭圆圆,并并在在“矩形矩形”和和“椭圆椭圆”两个菜单项之间添加一条分隔线。两个菜单项之间添加一条分隔线。12Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 “矩形矩形”菜单的快捷键,此处仅起提示菜单的快捷键,此处仅起提示作用,要真正成为快捷键还需要使用快作用,要真正成为快捷键还需要使用快捷键编辑器进行设置捷键编辑器进行设置13Visual C+程序设
10、计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (4)为菜单项添加快捷键。为菜单项添加快捷键。打打开开ResourceView视视图图中中的的Accelerator文文件件夹夹,双双击击IDR_MAINFRAME打打开开快快捷捷键键编编辑辑器器。双双击击编编辑辑器器底底部部的的空空白白框框,打打开开AccelProperties对对话话框框,在在ID栏栏下下拉拉列列表表中中选选择择ID_RECTANGLE,在在Key编编辑辑框框中中输输入入R,右右边边单单选选按按钮钮接接受受默默认认值值,关关闭闭对对话话框框。用用同同样样的的方方法法为为“椭圆椭圆”菜单项定义快捷
11、键。如图所示,菜单项定义快捷键。如图所示,14Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 15Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (5)(5)编译、链接并运行程序。编译、链接并运行程序。菜单项为灰色菜单项为灰色不可用不可用16Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 6.1.3 建立消息映射建立消息映射 在在上上例例中中仅仅添添加加了了菜菜单单,并并没没有有实实现现菜菜单单的的功功能能,即即没没有有对对应应的的命
12、命令令处处理理函函数数与与菜菜单单项项对对应应,因因此此,添添加的菜单项是加的菜单项是灰色灰色的,即的,即处于当前不可用状态处于当前不可用状态。添添加加新新的的菜菜单单项项后后,还还应应该该为为菜菜单单项项指指定定一一个个处处理理函函数数,即即利利用用ClassWizardClassWizard类类向向导导添添加加一一个个消消息息处处理理函数。函数。17Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 【例例6.26.2】为例为例6.16.1中增加的菜单项添加消息处理函数。中增加的菜单项添加消息处理函数。(1)(1)打打开例开例6.16.1中
13、所创建的应用程序中所创建的应用程序MyDrawMyDraw。(2)(2)单单击击【View View|ClassWizardClassWizard】菜菜单单项项或或按按Ctrl+WCtrl+W键键启动启动ClassWizardClassWizard类向导类向导。(3)(3)为为“矩形矩形”及及“椭圆椭圆”菜单项添加消息处理函菜单项添加消息处理函数。数。在在ClassWizardClassWizard对对话话框框的的Class Class namename栏栏下下拉拉列列表表中中选选 择择 CMyDrawViewCMyDrawView,在在 Object Object IDsIDs栏栏 中中 选
14、选 择择ID_RECTANGLEID_RECTANGLE,在在MessagesMessages栏栏选选择择COMMANDCOMMAND,单单击击Add Add FunctionFunction按按钮钮,接接受受系系统统默默认认函函数数名名。单单击击Edit Edit CodeCode按钮,为消息处理函数添加如下代码按钮,为消息处理函数添加如下代码。18Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 void CMyDrawView:OnRectangle()/TODO:Add your command handler code hereCC
15、lientDC dc(this);dc.Rectangle(10,10,200,100);/绘绘制矩形制矩形用同用同样样的方法的方法为为“椭圆椭圆”菜菜单项单项添加消息添加消息处处理函数,并理函数,并编编写如下代写如下代码码。void CMyDrawView:OnEllipse()/TODO:Add your command handler code hereCClientDC dc(this);dc.Ellipse(250,100,450,250);19Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (4)编编译译、链链接接并并运运行行程
16、程序序,分分别别选选择择“矩矩形形”和和“椭圆椭圆”菜单项,结果如图所示菜单项,结果如图所示。20Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 6.1.4 快捷菜单快捷菜单 为应用程序创建快捷菜单主要有以下两种方法。为应用程序创建快捷菜单主要有以下两种方法。1.1.使用使用Component GalleryComponent Gallery创建快捷菜单创建快捷菜单 Component Component Gallery(Gallery(组组件件画画廊廊)是是一一个个组组件件库库,它它保保存存着着可可以以共共享享或或重重用用的的代代码码。这
17、这些些代代码码包包括括由由Visual Visual C+C+自自带带的的组组件件和和从从用用户户工工程程中中增增加加到到GalleryGallery中中去去的的用用户自定义组件。户自定义组件。21Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 【例例6.3】为为例例6.2中中的的应应用用程程序序MyDraw增增加加一一个个快快捷捷菜菜单单。程程序序运运行行后后,用用户户在在视视图图窗窗口口中中右右击击,弹弹出出一一个个快捷菜单,显示主菜单快捷菜单,显示主菜单“绘图绘图”下的所有菜单项。下的所有菜单项。快捷菜单快捷菜单22Visual C+
18、程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (1)(1)打开例打开例6 6.2 2中的项目中的项目MyDrawMyDraw。(2)(2)选选择择【Project|Add Project|Add To To ProjectProject】菜菜单单项项,单单击击【ComponentsComponents and and ControlsControls】子子菜菜单单项项,弹弹出出ComponentsComponents and Controls and Controls GalleryGallery对话框,如图所示对话框,如图所示。23Visual C+程序
19、设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 双击打开对话框中的双击打开对话框中的VisualC+Components文件文件夹,如图所示夹,如图所示。24Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (3)(3)选选择择对对话话框框列列表表中中的的Pop-up Pop-up MenuMenu项项,单单击击InsertInsert按按钮钮,在在弹弹出出的的提提示示对对话话框框中中单单击击OKOK按按钮钮,弹弹出出Pop-up Pop-up MenuMenu对话框,如图所示对话框,如图所示。在在Pop-up
20、 Pop-up MenuMenu对对话话框框的的Add Add pop-up pop-up menu menu toto:下下拉拉列列表表中中选选择择CMyDrawViewCMyDrawView,即即将将创创建建的的快快捷捷菜菜单单与与视视图图类类相相关关联联。接接受受默默认认的的菜菜单单IDID值值。单单击击OKOK按按钮钮,插插入入快快捷捷菜单菜单。25Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (4)编辑快捷菜单编辑快捷菜单。展展开开ResourceView视视图图中中的的Menu文文件件夹夹,双双击击新新的的菜菜单单资资源源CG
21、_IDR_POPUP_MY_DRAW_VIEW,打打开开菜菜单资源编辑器,删除菜单单资源编辑器,删除菜单POPUP下的默认菜单项下的默认菜单项。26Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 27Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 打打开开IDR_MAINFRAME菜菜单单资资源源,将将主主菜菜单单“绘绘图图”的的所所有有下下拉拉菜菜单单项项复复制制到到剪剪贴贴板板上上。返返回回到到新新菜菜单单资资源源编编辑辑器器,将将复复制制的的内内容容粘粘贴贴到到新新的的快快捷捷菜菜
22、单单上上。这这样样快捷菜单就具有了与快捷菜单就具有了与“绘图绘图”主菜单完全相同的功能。主菜单完全相同的功能。28Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 主菜单“绘图”的所有子菜单29Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (5)(5)为快捷菜单连接一个类。为快捷菜单连接一个类。将将鼠鼠标标移移到到新新的的快快捷捷菜菜单单上上,右右击击选选择择ClassWizardClassWizard菜菜单单项项,打打开开ClassWizardClassWizard窗窗口口,并并弹弹出
23、出Adding Adding a a ClassClass对话框,如下图所示。对话框,如下图所示。选选择择Select Select an an existing existing classclass项项,单单击击OKOK按按钮钮,在在弹弹出出的的Select Select ClassClass对对 话话 框框 类类列列 表表 中中 选选 择择CMyDrawViewCMyDrawView,单单击击SelectSelect按钮。按钮。(6)(6)编译、链接并运行程序。编译、链接并运行程序。30Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏
24、2.2.使用使用TrackPopupMenuTrackPopupMenu()()函数创建快捷菜单函数创建快捷菜单 使使用用菜菜单单资资源源编编辑辑器器和和CMenu:TrackPopupMenuCMenu:TrackPopupMenu()函函数来创建右键快捷菜单。数来创建右键快捷菜单。CMenu:TrackPopupMenuCMenu:TrackPopupMenu函数的原型为:函数的原型为:BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd*pWnd,LPCRECT lpRect=NULL);该该函函数数的的功功能能是是显显示示一一个个右右键键快快
25、捷捷菜菜单单。其其中中,nflagsnflags表表示示屏屏幕幕位位置置标标志志(见见下下表表)。x x、y y分分别别表表示示菜菜单单的的水水平平坐坐标标和和顶顶端端的的垂垂直直坐坐标标;pWndpWnd表表示示弹弹出出菜菜单单的的窗窗口口,包包括括全全部部的的WM_COMMANDWM_COMMAND消消息息;lpRectlpRect表表示示一一个个矩矩形形域域,当当单击这个矩形域时菜单不消失。单击这个矩形域时菜单不消失。31Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 参数参数nflags的含义的含义32Visual C+程序设计31
26、-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 【例例6.4】使使用用TrackPopupMenu()函函数数创创建建例例6.3中中的的快快捷捷菜单。菜单。(1)打打开例开例6.2中中的项目的项目MyDraw。(2)选选择择【Insert|Resource】菜菜单单项项,向向应应用用程程序序中中添添加加一一个新的菜单资源,并将新菜单的个新的菜单资源,并将新菜单的ID改为改为IDR_POPUP。双双 击击 ResourceView视视 图图 中中 Menu文文 件件 夹夹 下下 的的IDR_MAINFRAME,打打开开标标准准菜菜单单编编辑辑器器,单单击击【绘绘图图】菜菜
27、单单项项并并复复制制。双双击击新新菜菜单单资资源源IDR_POPUP,打打开开快快捷捷菜菜单单编编辑器,单击空白菜单项并粘贴辑器,单击空白菜单项并粘贴。(3)用例用例6.3中中步骤步骤(5)的方法为快捷菜单连接类的方法为快捷菜单连接类CMyDrawView。33Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (4)加载并显示快捷菜单加载并显示快捷菜单。打打开开ClassWizard对对话话框框,在在Classname栏栏和和ObjectIDs下下拉拉列列表表中中均均选选择择CMyDrawView,在在Messages中中选选择择WM_CON
28、TEXTMENU,单单击击AddFunction按按钮钮,再再单单击击EditCode,在在打打开开的的WM_CONTEXTMENU消消息息处处理函数中添加如下代码理函数中添加如下代码。34Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 35Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (5)编译、链接并运行程序,得到编译、链接并运行程序,得到与例与例6.3中中相同的效果。相同的效果。36Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态
29、栏 6.2 6.2 工具栏工具栏 在在MFCMFC中中,工工具具栏栏的的功功能能由由类类CToolBarCToolBar实实现现。工工具具栏栏资资源源和和工工具具栏栏类类CToolBarCToolBar是是工工具具栏栏的的两两个个要要素素。创创建建工具栏的基本步骤是:工具栏的基本步骤是:l l创建工具栏资源;创建工具栏资源;l l构建一个构建一个CToolBarCToolBar对象;对象;l l调调用用CToolBar:CreateCToolBar:Create()或或CreateExCreateEx()函函数数创创建工具栏窗口;建工具栏窗口;l l调用调用CToolBar:LoadToolB
30、arCToolBar:LoadToolBar载入工具栏资源。载入工具栏资源。37Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 6.2.1 编辑工具栏编辑工具栏 使使 用用 工工 具具 栏栏 编编 辑辑 器器 来来 编编 辑辑 工工 具具 栏栏 资资 源源。双双 击击ResourceViewResourceView视视图图中中的的ToolbarToolbar工工具具栏栏资资源源,即即可可打打开开工工具栏编辑器。具栏编辑器。38Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 1.1.添加按
31、钮添加按钮 双双击击工工具具条条上上的的空空白白按按钮钮或或单单击击空空白白按按钮钮后后,选选择择【View|Properties】菜菜单单项项,弹弹出出如如图图所所示示的的ToolbarButtonProperties属属性性对对话话框框,在在此此对对话话框框中编辑按钮的标识符、宽度与高度值。中编辑按钮的标识符、宽度与高度值。39Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 2.2.删除按钮删除按钮 将按钮拖出工具栏外,即可删除该按钮。将按钮拖出工具栏外,即可删除该按钮。3.3.编辑按钮位图编辑按钮位图设置按钮位图有以下两种方法。设置按
32、钮位图有以下两种方法。l l利用绘图工具与调色板直接进行绘制利用绘图工具与调色板直接进行绘制l l先利用专用绘图软件制作,然后粘贴到按钮上先利用专用绘图软件制作,然后粘贴到按钮上40Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 6.2.2 建立消息映射建立消息映射 通通常常,只只需需让让一一个个按按钮钮的的IDID值值与与同同样样功功能能菜菜单单项项的的IDID值相同即可。值相同即可。如如果果按按钮钮没没有有对对应应菜菜单单项项,则则必必须须利利用用ClassWizardClassWizard类向导添加一个消息处理函数。类向导添加一个消息
33、处理函数。41Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 【例例6.5】创创建建一一个个单单文文档档的的应应用用程程序序。为为该该应应用用程程序序添添加加二二个个按按钮钮到到工工具具条条中中,单单击击第第一一个个按按钮钮,在在视视图图窗窗口口中中显显示示“打打开开文文件件”对对话话框框;单单击击第第二二个个按按钮钮,视视图图窗窗口口中中会会弹出一消息框,在其中显示自己的名字。弹出一消息框,在其中显示自己的名字。42Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (1)使使用用MFCA
34、ppWizardexe向向导导创创建建一一个个单单文文档档应应用用程程序序Li6_5,然后打,然后打开工具栏资源编辑器。开工具栏资源编辑器。(2)用用鼠鼠标标单单击击工工具具栏栏最最后后的的空空白白框框,用用绘绘图图工工具具及及调调色板制色板制作作【O】按按钮。钮。双双击击工工具具栏栏中中刚刚绘绘制制的的新新按按钮钮,打打开开其其属属性性设设置置对对话框话框,在,在ID栏中栏中选择选择ID_FILE_OPEN。用用同同样样的的方方法法定定义义一一个个【T】按按钮钮,设设置置其其ID为为ID_TEXT。43Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具
35、栏与状态栏 由由于于第第一一个个新新按按钮钮与与系系统统提提供供的的文文件件|打打开开菜菜单单项相对应,因此,不需要为它添加消息处理函数。项相对应,因此,不需要为它添加消息处理函数。(3)为第二个为第二个新按钮添加消息处理函新按钮添加消息处理函数。数。打打开开ClassWizard对对话话框框,选选择择MessageMaps选选项项卡卡,在在Classname栏栏中中选选择择CLi6_5View,在在ObjectIDs下下 拉拉 列列 表表 中中 选选 择择 ID_TEXT,在在 Messages栏栏 中中 选选 择择COMMAND,单单击击Add Function按按钮钮,再再单单击击Edi
36、tCode,在函数中添加代码,在函数中添加代码。44Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 void CLi6_5View:OnText()CClientDC dc(this);dc.TextOut(50,50,“学生姓名学生姓名);(5)编译编译、链链接并运行程序。接并运行程序。45Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 6.3 6.3 状态栏状态栏 状状态态栏栏实实际际上上是是一一个个窗窗口口,一一般般分分为为几几个个窗窗格格,每个窗格显示不同的信息。每个窗格显示不同
37、的信息。使使用用AppWizard创创建建的的单单文文档档应应用用程程序序,接接受受默默认认选选项项时时,生生成成的的应应用用程程序序自自动动创创建建带带有有默默认认窗窗格的状态栏。格的状态栏。46Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 6.3.1 状态栏类的继承关系状态栏类的继承关系 在在MFC中,状态栏的功能由中,状态栏的功能由CStatusBar类实现。类实现。47Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 6.3.2 状态栏类的成员函数状态栏类的成员函数 48Visu
38、al C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 6.3.3 状态栏操作状态栏操作 利利用用MFC MFC AppWizardAppWizard向向导导创创建建应应用用程程序序时时,首首先先在在CMainFrameCMainFrame类类中中定定义义一一个个成成员员变变量量m_wndStatusBarm_wndStatusBar,它它是是状状态态栏栏类类CStatusBarCStatusBar的的对对象象。其其次次在在MFCMFC应应用用程程序序框框架架的的实实现现文文件件MainFrm.cppMainFrm.cpp中中,为为状状态态栏栏定定义义一一
39、个个静静态态数数组组indicatorsindicators,如下所示:如下所示:static UINT indicators=ID_SEPARATOR,/显示命令功能提示显示命令功能提示 ID_INDICATOR_CAPS,/显示大写锁定键状态显示大写锁定键状态 ID_INDICATOR_NUM,/显示数字锁定键状态显示数字锁定键状态 ID_INDICATOR_SCRL,/显示滚动锁定键状态显示滚动锁定键状态;49Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 这这个个全全局局的的提提示示符符数数组组indicatorsindicator
40、s中中的的每每个个元元素素代代表表状状态态栏栏上上一一个个窗窗格格的的IDID值值,这这些些IDID在在应应用用程程序序的的串表资源串表资源String TableString Table中进行了说明。中进行了说明。通通过过增增加加新新的的IDID标标识识来来增增加加用用于于显显示示状状态态信信息息的的窗窗格格。状状态态栏栏显显示示的的内内容容由由数数组组indicatorsindicators决决定定,需需要要在在状状态态栏栏中中显显示示的的各各窗窗格格的的标标识识符符、位位置置以以及及个个数数也由该数组决定,状态栏显示的内容是可以修改的。也由该数组决定,状态栏显示的内容是可以修改的。50V
41、isual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 最最后后CWnd:CreateCWnd:Create()函函数数以以主主框框架架窗窗口口为为父父窗窗口口创创建建状状态态栏栏,创创建建后后默默认认停停靠靠在在主主框框架架窗窗口口的的底底部部。CWnd:SetIndicators(indicators,sizeof(indicators)CWnd:SetIndicators(indicators,sizeof(indicators)/sizeof(UINT/sizeof(UINT)函函 数数 将将 创创 建建 后后 的的 状状 态态 栏栏 分分
42、隔隔 为为sizeof(indicators)/sizeof(UINTsizeof(indicators)/sizeof(UINT)个个窗窗格格,窗窗格格的的IDID分分别为别为indicatorsindicators数组中的元素值。数组中的元素值。51Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 一一个个应应用用程程序序只只有有一一个个状状态态栏栏,所所以以对对状状态态栏栏的的操作主要是对状态栏上窗格的操作。操作主要是对状态栏上窗格的操作。为为了了把把一一个个窗窗格格添添加加到到默默认认的的状状态态栏栏中中,一一般般要要完成下列步骤:完
43、成下列步骤:l l为新建窗格创建一个命令为新建窗格创建一个命令IDID和默认字符串;和默认字符串;l l将将 该该 窗窗 格格 的的 命命 令令 IDID添添 加加 到到 状状 态态 栏栏 的的 静静 态态 数数 组组indicatorsindicators中;中;l l为该窗格创建一个命令更新处理程序。为该窗格创建一个命令更新处理程序。52Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 【例例6.6】编编写写一一个个单单文文档档应应用用程程序序Li6_6。程程序序运运行行后后,在状态栏中显示系统时间。在状态栏中显示系统时间。(1)启启动动
44、VisualC+,使使用用MFCAppWizardexe向向导导创创建一个单文档应用程序建一个单文档应用程序Li6_6。(2)选选择择项项目目工工作作区区的的FileView视视图图,打打开开MainFrm.cpp文文件件。在在状状态态栏栏的的静静态态数数组组indicators的的第第一一项项后后面面添添加加ID_INDICATOR_CLOCK,为为状状态态增增加加一一个个窗窗格格,用用来显示系统时间。来显示系统时间。(3)选选择择项项目目工工作作区区的的ResourceView视视图图,打打开开串串表表编编辑辑器器。双双击击串串表表编编辑辑器器中中的的空空白白框框,在在弹弹出出的的字字符符
45、串串属属性性设设置置对对话话框框的的ID栏栏中中输输入入ID_INDICATOR_CLOCK,在在Caption栏栏中中输输入入00:00:00,定定义义窗窗格格中中数数据据输输出出格格式及长度。式及长度。53Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (4)在在CMainFrame类类的的OnCreate()函函数数中中添添加加如如下下代代码。码。intCMainFrame:OnCreate(LPCREATESTRUCTlpCreateStruct)SetTimer(1,1000,NULL);return0;函函数数CWnd:SetT
46、imer()用用来来安安装装一一个个计计时时器器,它它的的第第一一个个参参数数指指定定计计时时ID为为1,第第二二个个参参数数指指定定计计时时器器的的时时间间间间隔隔为为1000毫毫秒秒。这这样样,每每隔隔1秒秒OnTimer()函函数数就就会被调用一次。会被调用一次。54Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 (5)利利 用用 ClassWizard类类 向向 导导 给给 CMainFrame类类 添添 加加 WM_TIMER和和WM_CLOSER消息处理函数消息处理函数OnTimer()和和OnClose(),并添加代码。,并添
47、加代码。voidCMainFrame:OnTimer(UINTnIDEvent)/TODO:Addyourmessagehandlercodehereand/orcalldefaultCTimetime;time=CTime:GetCurrentTime();/获得系统时间获得系统时间/将系统时间转换成时将系统时间转换成时:分分:秒格式的字符串秒格式的字符串CStrings=time.Format(%H:%M:%S);/更新时间窗格显示的时间内容更新时间窗格显示的时间内容m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_IN
48、DICATOR_CLOCK),s);CFrameWnd:OnTimer(nIDEvent);55Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 voidCMainFrame:OnClose()/TODO:Addyourmessagehandlercodehereand/orcalldefaultKillTimer(1);/关闭计时器关闭计时器CFrameWnd:OnClose();(6)编译、链接并运行程序。结果如图所示编译、链接并运行程序。结果如图所示。56Visual C+程序设计31-Dec-22第第6 6章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 57