第4章-菜单工具栏与状态栏课件.ppt

上传人(卖家):晟晟文业 文档编号:4622297 上传时间:2022-12-26 格式:PPT 页数:44 大小:359.50KB
下载 相关 举报
第4章-菜单工具栏与状态栏课件.ppt_第1页
第1页 / 共44页
第4章-菜单工具栏与状态栏课件.ppt_第2页
第2页 / 共44页
第4章-菜单工具栏与状态栏课件.ppt_第3页
第3页 / 共44页
第4章-菜单工具栏与状态栏课件.ppt_第4页
第4页 / 共44页
第4章-菜单工具栏与状态栏课件.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

1、第第 4 4 章章 菜单、工具栏与状态栏菜单、工具栏与状态栏 4.1 菜单菜单 4.2 工具栏工具栏 4.3 状态栏状态栏 4.4 应用实例应用实例24.1 4.1 菜单菜单 4.1.1 菜单的类型菜单的类型 常见菜单有常见菜单有3 3种种:主菜单、弹出菜单和快捷菜单主菜单、弹出菜单和快捷菜单。1.1.主菜单主菜单 指出现在应用程序主窗口或最上层窗口的菜单。指出现在应用程序主窗口或最上层窗口的菜单。通常对应有一个弹出菜单作为它的子菜单。通常对应有一个弹出菜单作为它的子菜单。32.2.弹出菜单弹出菜单 指指选择主菜单或一个菜单项时弹出的子菜单选择主菜单或一个菜单项时弹出的子菜单。3.3.快捷菜单

2、快捷菜单 当当右击某个界面对象右击某个界面对象时,通常会时,通常会弹出快捷菜单弹出快捷菜单,它出现在鼠标箭头的位置,它出现在鼠标箭头的位置,快速展示当前对象可用的快速展示当前对象可用的命令功能命令功能。4菜单设计一般需要经过下面两步:菜单设计一般需要经过下面两步:(1)(1)使用菜单编辑器编辑菜单资源;使用菜单编辑器编辑菜单资源;(2)(2)使用使用ClassWizardClassWizard进行消息映射,编辑成员函进行消息映射,编辑成员函数,完成菜单所要实现的功能。数,完成菜单所要实现的功能。54.1.2 编辑菜单编辑菜单 使用菜单编辑器来编辑菜单资源。双击使用菜单编辑器来编辑菜单资源。双击

3、ResourceViewResourceView视图中的视图中的MenuMenu菜单资源,打开菜单编辑器。菜单资源,打开菜单编辑器。61.1.插入新菜单项插入新菜单项在当前空白菜单项位置插入在当前空白菜单项位置插入 选定窗口中的空白菜单项后按回车键选定窗口中的空白菜单项后按回车键(或双或双击空白菜单项击空白菜单项),系统弹出菜单属性对话框。,系统弹出菜单属性对话框。在某菜单项前插入在某菜单项前插入 选中该菜单项并按选中该菜单项并按InsIns键,再双击该空白键,再双击该空白菜单项进行编辑。菜单项进行编辑。72.2.属性对话框的设置属性对话框的设置 用于输入菜单项的用于输入菜单项的标识符标识符(

4、ID)(ID)、标题标题(Caption)(Caption)和菜和菜单项在状态栏上显示的单项在状态栏上显示的提示提示(Prompt)(Prompt)信息等信息等。菜单项的标菜单项的标识符识符(ID)(ID)菜单项在状态栏上菜单项在状态栏上显示的提示信息显示的提示信息标题标题893.3.调整菜单项位置调整菜单项位置 选中某菜单项将其拖至适当位置。选中某菜单项将其拖至适当位置。4.4.删除菜单项删除菜单项 用鼠标单击菜单项或用上、下、左、右光标键用鼠标单击菜单项或用上、下、左、右光标键选择菜单项,然后单击选择菜单项,然后单击CutCut按钮或按按钮或按DelDel键删除。键删除。10【例例4.1】

5、编写一个单文档应用程序编写一个单文档应用程序MyDraw,在菜单栏,在菜单栏中增加一个中增加一个“绘图绘图”主菜单,并在其中添加主菜单,并在其中添加“矩形矩形”和和“椭圆椭圆”两个菜单项。两个菜单项。114.1.3 建立消息映射建立消息映射 在上例中仅添加了菜单,并没有实现菜单的功能,在上例中仅添加了菜单,并没有实现菜单的功能,即没有对应的命令处理函数与菜单项对应,因此,添即没有对应的命令处理函数与菜单项对应,因此,添加的菜单项是加的菜单项是灰色灰色的,即的,即处于当前不可用状态处于当前不可用状态。添加新的菜单项后,还应该为菜单项指定一个处添加新的菜单项后,还应该为菜单项指定一个处理函数,即利

6、用理函数,即利用ClassWizardClassWizard类向导添加一个消息处理类向导添加一个消息处理函数。函数。12【例例4.24.2】为例为例4.14.1中增加的菜单项添加消息处理函数。中增加的菜单项添加消息处理函数。134.1.4 菜单的有效控制菜单的有效控制 一般情况下,菜单项都不止一种状态。一般情况下,菜单项都不止一种状态。例如,在没有选择任何内容时,例如,在没有选择任何内容时,EditEdit菜单下的菜单下的CopyCopy、CutCut等菜单项是无效的等菜单项是无效的(灰色显示灰色显示)。有时,我们还会看到,在菜单。有时,我们还会看到,在菜单项旁边可能还会有检查标记,表示它是选

7、中的还是不选中的。项旁边可能还会有检查标记,表示它是选中的还是不选中的。比如,在比如,在WordWord的视图菜单项下,当用户选用的视图菜单项下,当用户选用【网格线网格线】或或【标标尺尺】时,相应菜单项前会出现一个时,相应菜单项前会出现一个“”。MFCMFC通过消息映射机制和通过消息映射机制和CCmdUICCmdUI类更新菜单项类更新菜单项的显示的显示。14 在类向导在类向导ClassWizardClassWizard的的Message MapMessage Map标签中,标签中,如果选择一个菜单如果选择一个菜单IDID,在,在MessagesMessages列表框中就会列表框中就会出现以下两

8、项:出现以下两项:COMMANDUPDATE_COMMAND_UI 其中其中UPDATE_COMMAND_UI是更新命令用是更新命令用户接口消息,专门用于处理菜单项和工具条按钮户接口消息,专门用于处理菜单项和工具条按钮的更新。的更新。15【例例4.34.3】为例为例4.24.2的程序的程序MyDrawMyDraw添加更新用户界面的消添加更新用户界面的消息处理函数,使程序启动时菜单项息处理函数,使程序启动时菜单项【椭圆椭圆】处于不可用处于不可用状态,当用户单击状态,当用户单击【矩形矩形】菜单项后,在菜单项前显示菜单项后,在菜单项前显示 “”标记,并使标记,并使【椭圆椭圆】菜单项变为可用。菜单项变

9、为可用。164.1.5 快捷菜单快捷菜单 为应用程序创建快捷菜单主要有以下两种方法。为应用程序创建快捷菜单主要有以下两种方法。1.1.使用使用Component GalleryComponent Gallery创建快捷菜单创建快捷菜单 Component Gallery(Component Gallery(组件画廊组件画廊)是一个组件库,它是一个组件库,它保存着可以共享或重用的代码。这些代码包括由保存着可以共享或重用的代码。这些代码包括由Visual Visual C+C+自带的组件和从用户工程中增加到自带的组件和从用户工程中增加到GalleryGallery中去的用中去的用户自定义组件。户自

10、定义组件。17【例例4.4】为例为例4.3中的应用程序中的应用程序MyDraw增加一个快捷增加一个快捷菜单。程序运行后,用户在视图窗口中右击,弹出一个菜单。程序运行后,用户在视图窗口中右击,弹出一个快捷菜单,显示主菜单快捷菜单,显示主菜单“绘图绘图”下的所有菜单项。下的所有菜单项。快捷菜单快捷菜单182.2.使用使用TrackPopupMenu()TrackPopupMenu()函数创建快捷菜单函数创建快捷菜单 使用菜单资源编辑器和使用菜单资源编辑器和CMenu:TrackPopupMenu()CMenu:TrackPopupMenu()函函数来创建右键快捷菜单。数来创建右键快捷菜单。CMen

11、u:TrackPopupMenuCMenu:TrackPopupMenu函数的原型为:函数的原型为:BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd*pWnd,LPCRECT lpRect=NULL);该函数的功能是显示一个右键快捷菜单。其中,该函数的功能是显示一个右键快捷菜单。其中,nflagsnflags表示屏幕位置标志(见下表)。表示屏幕位置标志(见下表)。x x、y y分别表示菜单分别表示菜单的水平坐标和顶端的垂直坐标;的水平坐标和顶端的垂直坐标;pWndpWnd表示弹出菜单的窗口,表示弹出菜单的窗口,包括全部的包括全部的WM_COMMA

12、NDWM_COMMAND消息;消息;lpRectlpRect表示一个矩形域,当表示一个矩形域,当单击这个矩形域时菜单不消失。单击这个矩形域时菜单不消失。19参数参数nflags的含义的含义 20【例例4.5】使用使用TrackPopupMenu()函数创建例函数创建例4.3中的快捷中的快捷菜单。菜单。214.1.6 创建动态菜单创建动态菜单动态创建菜单分为以下动态创建菜单分为以下3 3个步骤。个步骤。(1)(1)利用利用CreateMenu()CreateMenu()函数创建一个空的弹出式菜单,函数创建一个空的弹出式菜单,该函数的原型为:该函数的原型为:HMENU CreateMenu()该函

13、数没有参数,它的返回值是一个菜单句柄。该函数没有参数,它的返回值是一个菜单句柄。(2)调用调用AppendMenu()或或InsertMenu()函数在菜单中加函数在菜单中加入菜单项。入菜单项。(3)(3)调用函数调用函数SetMenu()SetMenu()加载动态菜单。加载动态菜单。22【例例4.6】为例为例4.4中的应用程序中的应用程序MyDraw创建一个创建一个【画画笔笔】动态菜单。程序运行后,用户单击动态菜单。程序运行后,用户单击【绘图绘图|矩形矩形】菜单项,在主菜单中添加动态菜单菜单项,在主菜单中添加动态菜单【画笔画笔】,并通过此,并通过此菜单的子菜单项画一个红色矩形。菜单的子菜单项

14、画一个红色矩形。234.1.7 创建基于对话框的菜单创建基于对话框的菜单 从第从第2 2章可知,利用章可知,利用MFC AppWizardexeMFC AppWizardexe向导工具可向导工具可以生成基于对话框的应用程序。以生成基于对话框的应用程序。基于对话框的应用程序在运行时并没有菜单栏。基于对话框的应用程序在运行时并没有菜单栏。下面我们通过实例来讨论如何给它创建一个菜单。下面我们通过实例来讨论如何给它创建一个菜单。24【例例4.7】编写一个基于对话框的应用程序编写一个基于对话框的应用程序Li4_7,为该应,为该应用程序添加一个菜单。菜单包括用程序添加一个菜单。菜单包括【文件文件】、【编辑

15、编辑】、【视图视图】和和【帮助帮助】4个主菜单项。个主菜单项。254.2 4.2 工具栏工具栏 在在MFCMFC中,工具栏的功能由类中,工具栏的功能由类CToolBarCToolBar实现。工具实现。工具栏资源和工具栏类栏资源和工具栏类CToolBarCToolBar是工具栏的两个要素。创建是工具栏的两个要素。创建工具栏的基本步骤是:工具栏的基本步骤是:l l 创建工具栏资源;创建工具栏资源;l l 构建一个构建一个CToolBarCToolBar对象;对象;l l 调用调用CToolBar:Create()CToolBar:Create()或或CreateEx()CreateEx()函数创函

16、数创建工具栏窗口;建工具栏窗口;l l 调用调用CToolBar:LoadToolBarCToolBar:LoadToolBar载入工具栏资源。载入工具栏资源。264.2.1 编辑工具栏编辑工具栏 使 用 工 具 栏 编 辑 器 来 编 辑 工 具 栏 资 源。双 击使 用 工 具 栏 编 辑 器 来 编 辑 工 具 栏 资 源。双 击ResourceViewResourceView视图中的视图中的ToolbarToolbar工具栏资源,即可打开工工具栏资源,即可打开工具栏编辑器。具栏编辑器。271.1.添加按钮添加按钮 双击工具条上的空白按钮或单击空白按钮后,选双击工具条上的空白按钮或单击空

17、白按钮后,选择择【View|Properties】菜单项,弹出如图所示的菜单项,弹出如图所示的Toolbar Button Properties属性对话框,在此对话框属性对话框,在此对话框中编辑按钮的标识符、宽度与高度值。中编辑按钮的标识符、宽度与高度值。282.2.删除按钮删除按钮 将按钮拖出工具栏外,即可删除该按钮。将按钮拖出工具栏外,即可删除该按钮。3.3.编辑按钮位图编辑按钮位图设置按钮位图有以下两种方法。设置按钮位图有以下两种方法。l l 利用绘图工具与调色板直接进行绘制利用绘图工具与调色板直接进行绘制l l 先利用专用绘图软件制作,然后粘贴到按钮上先利用专用绘图软件制作,然后粘贴到

18、按钮上294.2.2 建立消息映射建立消息映射 通常,只需让一个按钮的通常,只需让一个按钮的IDID值与同样功能菜单项的值与同样功能菜单项的IDID值相同即可。值相同即可。如果按钮没有对应菜单项,则必须利用如果按钮没有对应菜单项,则必须利用ClassWizardClassWizard类向导添加一个消息处理函数。类向导添加一个消息处理函数。30【例例4.8】编写一个单文档应用程序编写一个单文档应用程序Li4_8。删除默认工具。删除默认工具栏上的栏上的【打印设置打印设置】按钮,并在按钮,并在【帮助帮助】按钮前添加按钮前添加【上上一页一页】和和【下一页下一页】2个按钮,当用户单击这两个按钮后,个按钮

19、,当用户单击这两个按钮后,视图中分别显示文本视图中分别显示文本“这是这是上一页上一页按钮!按钮!”和和“这是这是下一页下一页按钮!按钮!”。314.2.3 自定义工具栏的操作自定义工具栏的操作 向导生成的标准工具栏的向导生成的标准工具栏的IDID值为值为IDR_MAINFRAMEIDR_MAINFRAME。对一些功能复杂的应用程序,需要创建多个不同的工具栏。对一些功能复杂的应用程序,需要创建多个不同的工具栏。生成工具栏的基本步骤:生成工具栏的基本步骤:(1)添加工具栏资源)添加工具栏资源;(2)参照)参照MFCMFC应用程序框架添加工具栏的方法,构造一应用程序框架添加工具栏的方法,构造一个个C

20、ToolBarCToolBar类的对象,调用类的对象,调用CToolBar:Create()CToolBar:Create()或或CreateEx()CreateEx()函数创建工具栏窗口函数创建工具栏窗口;(3)调用)调用CToolBar:LoadToolBar()CToolBar:LoadToolBar()函数载入工具栏函数载入工具栏资源。资源。除这些基本步骤之外,还可除这些基本步骤之外,还可以调用其他相关函数从而进以调用其他相关函数从而进一步改善工具栏。一步改善工具栏。321.创建工具栏窗口创建工具栏窗口 调用调用CToolBar:Create()或或CreateEx()函数创建并初始函

21、数创建并初始化工具栏窗口对象。若创建成功,函数返回化工具栏窗口对象。若创建成功,函数返回TRUE,否则返,否则返回回FALSE。2.装载工具栏资源装载工具栏资源 调用调用LoadToolBar()函数装载工具栏资源。用函数装载工具栏资源。用Create()或者或者CreateEx()函数创建工具栏,其实只是获得了一个窗口函数创建工具栏,其实只是获得了一个窗口句柄,工具栏窗口中位图按钮的加载是靠句柄,工具栏窗口中位图按钮的加载是靠LoadToolBar()函函数来完成的。若加载成功,将返回数来完成的。若加载成功,将返回TRUE,否则返回,否则返回FALSE。333.设置工具栏风格设置工具栏风格

22、如果在调用初始化函数如果在调用初始化函数CToolBar:Create()或者或者CreateEx()时设置的工具栏风格不满足需要,可以再用时设置的工具栏风格不满足需要,可以再用SetBarStyle()函数重新进行设置。函数重新进行设置。4.设置工具栏停靠特性设置工具栏停靠特性 设置工具栏停靠特性,需要调用设置工具栏停靠特性,需要调用EnableDocking()函数。函数。既要调用既要调用CControlBar:EnableDocking()函数设置工具栏函数设置工具栏的停靠特性,还要调用框架类的成员函数的停靠特性,还要调用框架类的成员函数EnableDocking()函数来设置框架窗口以

23、允许它的子窗口控制栏可以以何种函数来设置框架窗口以允许它的子窗口控制栏可以以何种方式停靠。不管一个框架窗口中有多少个子窗口控制栏,方式停靠。不管一个框架窗口中有多少个子窗口控制栏,该函数只需调用一次。该函数只需调用一次。345.设置工具栏的初始停靠位置设置工具栏的初始停靠位置 通过调用通过调用CFrameWnd:DockControlBar()函数定函数定位一个工具栏的初始停靠位置。位一个工具栏的初始停靠位置。6.移动工具栏移动工具栏 调用调用CFrameWnd:FloatControlBar()函数来移动、函数来移动、定位一个工具栏。定位一个工具栏。7.工具栏隐显控制工具栏隐显控制 通过对函

24、数通过对函数CWnd:SetStyle()的调用可以改变某些的调用可以改变某些工具栏窗口的风格,但该函数不能改变工具栏窗口的风格,但该函数不能改变WS_VISIBLE,只能通过父类只能通过父类CWnd的的ShowWindow()成员函数来显示成员函数来显示或隐藏工具栏。或隐藏工具栏。35【例例4.9】编写一个单文档应用程序编写一个单文档应用程序Li4_9。为该应用程序创。为该应用程序创建一个带有建一个带有“线线”、“圆圆”、“矩形矩形”和和“文本文本”4个按钮个按钮的工具栏,当用户单击工具栏上的按钮时,在窗口中显示的工具栏,当用户单击工具栏上的按钮时,在窗口中显示相应的图形。相应的图形。364

25、.3 4.3 状态栏状态栏 状态栏实际上是一个窗口,一般分为几个窗格,每个状态栏实际上是一个窗口,一般分为几个窗格,每个窗格显示不同的信息。窗格显示不同的信息。使用使用AppWizard创建的单文档应用程序,接受默认选项创建的单文档应用程序,接受默认选项时,生成的应用程序自动创建带有默认窗格的状态栏。时,生成的应用程序自动创建带有默认窗格的状态栏。37 4.3.1 状态栏类的继承关系状态栏类的继承关系 在在MFC中,状态栏的功能由中,状态栏的功能由CStatusBar类实现。类实现。CObject CCmdTarget CWnd CControlBar CStatusBar 38 4.3.2

26、状态栏类的成员函数状态栏类的成员函数 成员函数名 功 能 Create CreateEx SetIndicators SetPaneText CommandToIndex GetItemID GetItemRect GetPaneInfo GetPaneStyle GetPaneText 创建一个状态栏,并与状态栏对象相联系,同时初始化字体及高度 创建一个有附加风格的状态栏 设置窗格 ID 号 设置窗格文本 获取给定 ID 号的窗格索引 获取与索引对应的窗格 ID 号 获取给定索引的显示矩形 获取给定索引的窗格 ID 号、风格和宽度 获取给定窗格风格 获取给定索引的窗格文本 39 4.3.3

27、状态栏操作状态栏操作 利用利用MFC AppWizardMFC AppWizard向导创建应用程序时,首先在向导创建应用程序时,首先在CMainFrameCMainFrame类中定义一个成员变量类中定义一个成员变量m_wndStatusBarm_wndStatusBar,它是,它是状态栏类状态栏类CStatusBarCStatusBar的对象。其次在的对象。其次在MFCMFC应用程序框架的应用程序框架的实现文件实现文件MainFrm.cppMainFrm.cpp中,为状态栏定义一个静态数组中,为状态栏定义一个静态数组indicatorsindicators,如下所示:,如下所示:static

28、UINT indicators=ID_SEPARATOR,/显示命令功能提示显示命令功能提示 ID_INDICATOR_CAPS,/显示大写锁定键状态显示大写锁定键状态 ID_INDICATOR_NUM,/显示数字锁定键状态显示数字锁定键状态 ID_INDICATOR_SCRL,/显示滚动锁定键状态显示滚动锁定键状态;40 这个全局的提示符数组这个全局的提示符数组indicatorsindicators中的每个元素中的每个元素代表状态栏上一个窗格的代表状态栏上一个窗格的IDID值,这些值,这些IDID在应用程序的在应用程序的串表资源串表资源String TableString Table中进行

29、了说明。中进行了说明。通过增加新的通过增加新的IDID标识来增加用于显示状态信息的标识来增加用于显示状态信息的窗格。状态栏显示的内容由数组窗格。状态栏显示的内容由数组indicatorsindicators决定,需决定,需要在状态栏中显示的各窗格的标识符、位置以及个数要在状态栏中显示的各窗格的标识符、位置以及个数也由该数组决定,状态栏显示的内容是可以修改的。也由该数组决定,状态栏显示的内容是可以修改的。41 最后最后CWnd:Create()CWnd:Create()函数以主框架窗口为父窗口函数以主框架窗口为父窗口创建状态栏,创建后默认停靠在主框架窗口的底部。创建状态栏,创建后默认停靠在主框架

30、窗口的底部。CWnd:SetIndicators(indicators,sizeof(indicators)CWnd:SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)/sizeof(UINT)函数将创建后的状态栏分隔为函数将创建后的状态栏分隔为sizeof(indicators)/sizeof(UINT)sizeof(indicators)/sizeof(UINT)个窗格,窗格的个窗格,窗格的IDID分别为分别为indicatorsindicators数组中的元素值。数组中的元素值。42 一个应用程序只有一个状态栏,所以对状态栏一

31、个应用程序只有一个状态栏,所以对状态栏的操作主要是对状态栏上窗格的操作。的操作主要是对状态栏上窗格的操作。为了把一个窗格添加到默认的状态栏中,一般要为了把一个窗格添加到默认的状态栏中,一般要完成下列步骤:完成下列步骤:l l为新建窗格创建一个命令为新建窗格创建一个命令IDID和默认字符串;和默认字符串;l l将该窗格的命令将该窗格的命令IDID添加到状态栏的静态数组添加到状态栏的静态数组indicatorsindicators中;中;l l为该窗格创建一个命令更新处理程序。为该窗格创建一个命令更新处理程序。43 【例例4.10】编写一个单文档应用程序编写一个单文档应用程序Li4_10。程序运行。程序运行后,在状态栏中显示系统时间。后,在状态栏中显示系统时间。444.4 4.4 应用实例应用实例 编写一个能用不同的颜色及线宽绘制正弦与余弦编写一个能用不同的颜色及线宽绘制正弦与余弦曲线的应用程序。程序运行后,首先在视图窗口中显曲线的应用程序。程序运行后,首先在视图窗口中显示坐标轴,然后根据用户所选择的曲线类型、颜色及示坐标轴,然后根据用户所选择的曲线类型、颜色及线宽绘制曲线,并在状态栏中显示相关的提示信息。线宽绘制曲线,并在状态栏中显示相关的提示信息。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第4章-菜单工具栏与状态栏课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|