第7讲用户交互对象——菜单、工具栏和状态栏.ppt
《第7讲用户交互对象——菜单、工具栏和状态栏.ppt》由会员分享,可在线阅读,更多相关《第7讲用户交互对象——菜单、工具栏和状态栏.ppt(77页珍藏版)》请在三一办公上搜索。
1、第七讲 用户交互对象 菜单、工具栏和状态栏,中国地质大学(武汉)计算机学院,计算机高级语言(C+),教学要点,本章内容主要包括菜单资源和工具栏资源的建立,菜单和工具栏按钮对象对WM_COMMAND,UPDATE_COMMAND_UI消息的响应,状态栏牵涉的字符串资源的编辑和对UPDATE _COMMAND _UI消息的响应,在框架类中如何管理工具栏和状态栏。,本章内容,从MFC示例开始7.1 菜单7.2 工具栏7.3 状态栏 习题,从MFC示例开始,利用类向导,生成一个名为MfcExam的标准MFC多文档工程,类视图,资源视图,文件视图,用类向导生成菜单消息响应函数,资源ID,响应的消息,在视
2、图类中响应消息,添加消息响应函数,指定消息响应函数的名称,已添加的响应函数,编辑代码,类向导生成的代码如下:,在头文件 MfcExamView.h 中添加了响应函数的声明,在视图类 CMfcExamView 中添加了消息响应函数,向导添加的代码未做任何事情,7.1菜单,7.1.1菜单的组成与分类 7.1.2 创建菜单资源 7.1.3 菜单消息 7.1.4 菜单消息的响应*7.1.5 为菜单增加快捷键和加速键,7.1.1菜单的组成与分类,1菜单的组成 菜单是一种资源,它在资源脚本中经常被存作一个模板,用户通常从菜单栏中选择命令来操作应用程序。菜单主要由下列部分组成:(1)菜单栏(2)菜单(3)菜
3、单项(4)子菜单(5)分隔条(separator)2菜单的分类 Windows 系统支持三种类型的菜单,它们分别是菜单栏(主菜单)、弹出式子菜单和上下文菜单。,7.1.2 创建菜单资源,VC应用程序的资源是由应用程序使用,但却是在程序之外定义的只读数据。菜单是一种资源,可以利用文本编辑器来创建和修改资源,它操作麻烦,不具有可视化的效果。现在的VC程序中的资源编辑都是通过可视化的资源编辑器来进行的。对于SDI的应用程序,应用程序向导生成一个菜单资源IDR_MAINFRAM,对于一般的程序,我们就直接在上面添加自己所需要的菜单资源,方法为:,27,1打开缺省菜单资源 在Workspace窗口中选择
4、ResourceView选项卡,打开MenuExam工程的资源列表,选中“Menu”资源项目下的“IDR_MAINFRAME”,可以看到应用程序缺省定义的菜单资源形式,它包含如图所示的菜单中的“文件”、“编辑”、“查看”、“帮助”四个菜单项。,2增加一个主菜单项“图形”选择“帮助”菜单,然后按“Insert”键将会在“查看”与“帮助”菜单项之间加入一个空菜单项。双击该菜单项,弹出下图所示的主菜单属性对话框,并在其中的“Caption”编辑框中输入主菜单的标题为“图形”。这样在应用程序的主框架中就增加了一个主菜单项“图形”。,3、增加主菜单“图形”的子菜单项 用鼠标双击“图形”菜单下的空白菜单项
5、,弹出下图所示的子菜单属性设置对话框,在ID组合框中输入菜单的资源ID为ID_GRAPH_PIE,在“Caption”编辑框中输入“饼图”,在“Prompt”编辑框中输入菜单项提示信息为“在客户区画一个饼图n画饼图”。,用同样的方法再添加一个菜单项,其中菜单资源ID为ID_GRAPH_CHORD,“Caption”的内容为“弦图”,“Prompt”中的内容为“在客户区画一个弦图n画弦图”。,4增加上下文菜单 上下文菜单必须要有自己的资源ID,在Workspace窗口中选择ResourceView选项卡,打开MenuExam工程的资源列表,鼠标右键单击“Menu”项,在弹出菜单中选择“Inser
6、t Menu”,完后将该菜单资源的ID修改为IDR_POPUP_MENU。用同步骤3的方法在IDR_POPUP_MENU资源中添加主菜单“上下文菜单”。,7.1.3 菜单消息,菜单被选中时发送消息给Windows,再由Windows传送给应用程序的消息映射。在MFC消息映映射中,有三个菜单消息:WM_COMMAND、ON_UPDATE_COMMAND_UI和WM_CONTEXTMENU。1WM_COMMAND消息 当用户选中了菜单项,激活了相关键加速器或者是选中了与此菜单项相对应的工具栏按钮,Windows发送WM_COMMAND消息,该消息又叫命令消息。命令消息的消息映射采用以下形式:ON_
7、COMMAND(MenuId,ClassMethod),2UPDATE_COMMAND_UI消息 UPDATE_COMMAND_UI是MFC所特有的,如果你想根据应用程序的当前状态激活或者使菜单项无效,或者在程序运行的某一时刻反映菜单项的可用性,该条消息就要处理。消息映射采用以下形式:ON_UPDATE_COMMAND_UI(MenuID,ClassMethod)3上下文菜单消息WM_CONTEXTMENU 在Windows系统下,随处可见上下文菜单,只要你是在不同程序的不同操作区域内,按下鼠标右键,都会出来一个与当前操作上下文有关的菜单,它就是上下文菜单。当用户按下鼠标右键时,就会发出上下文
8、菜单消息WM_CONTEXTMENU。该消息的消息映射宏为:ON_WM_CONTEXTMENU(),7.1.4 菜单消息的响应,Windows是通过消息传递机制运行的。菜单项对命令的激发、调用是通过发送WM_COMMAND消息来实现的。在单文档和多文档的应用程序中,要考虑消息的路由问题。命令消息WM_COMMAND可以映射到不同的类中,可以根据菜单的不同作用进行不同的映射。对于通用的菜单,则在框架中映射。About对话框的显示菜单最好在应用程序类中映射。在使用类向导为菜单的命令消息进行映射后,ClassWizard自动向程序中插入菜单命令消息映射入口、消息处理函数的原型说明和空的消息映射函数体
9、。,菜单消息的响应,1添加WM_COMMAND菜单命令消息响应函数(1)打开前面创建的MenuExam工程,选择View|ClassWizard命令打开类向导对话框。(2)在图7.5所示的对话中,单击“ClassName”列表框中的下拉按钮,在其中选择“CMenuExamView”项,在“Object IDs”列表框中选择“ID_GRAPH_PIE”,在“Message”列表中选择“Command”项,然后单击“Add Fucntion”按钮弹出“Add Member Function”对话框,采用默认的函数名,单击“OK”按钮。(3)用同样的方法为视图类CmenuExamView中添加了“弦
10、图”菜单项的命令消息函数 OnGraphChord()。(4)消息映射函数的实现,菜单消息的响应,2添加UPDATE_COMMAND_UI更新菜单命令用户接口的消息响应函数(1)打开MenuExam工程,选择View|ClassWizard命令打开类向导对话框,单击“ClassName”列表框中的下拉按钮,在其中选择“CMenuExamView”项,在“Object IDs”列表框中选择“ID_GRAPH_PIE”,在“Message”列表中选择“UPDATE_COMMAND_UI”项,然后单击“Add Fucntion”按钮弹出“Add Member Function”对话框,采用默认的函数
11、名OnUpdateGraphPie,单击“OK”按钮。(2)用同样的方法,在视图类CmenuExamView中添加了“弦图”菜单项的更新命令用户接口的消息函数OnUpdateGraphChord()。,菜单消息的响应,(3)消息映射函数的实现“饼图”菜单项的更新命令用户接口消息函数OnUpdateGraphPie的代码void CMenuExamView:OnUpdateGraphPie(CCmdUI*pCmdUI)pCmdUI-Enable(!m_IsPie);“弦图”菜单项的更新命令用户接口消息函数OnUpdateGraphChord的代码 void CMenuExamView:OnUpd
12、ateGraphChord(CCmdUI*pCmdUI)pCmdUI-Enable(m_IsPie);,3添加WM_CONTEXTMENU上下文菜单消息响应函数(1)打开MenuExam工程,选择View|ClassWizard命令打开类向导对话框,单击“ClassName”列表框中的下拉按钮,在其中选择“CMenuExamView”项,在“Object IDs”列表框中选择“CMenuExamView”,在“Message”列表中选择“WM_CONTEXTMENU”项,然后单击“Add Fucntion”按钮弹出“Add Member Function”对话框,采用默认函数名OnContex
13、tMenu,单击“OK”按钮。,菜单消息的响应,菜单消息的响应,(2)鼠标右键单击响应函数OnContextMenu()的实现void CMenuExamView:OnContextMenu(CWnd*pWnd,CPoint point)CMenu PopupMenu;/定义菜单对象PopupMenu.LoadMenu(IDR_POPUP_MENU);PopupMenu.GetSubMenu(0)-TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);/弹出上下文菜单,7.1.5 为菜单增加快捷键和加速键,在应用程
14、序中,可以为每个菜单项增加快捷键和加速键。所谓快捷键就是当包含该菜单项的菜单被打开时,直接按某指定的键等同于用鼠标单击该菜单项。所谓加速键就是在没有打开包含该菜单项的菜单时,按组合键Ctrl+某指定键等价于用鼠标单击该菜单项。1快捷键的设置 打开菜单资源编辑器,双击“饼图”,修改Caption编辑框的标题为“饼图(&P)tCtrl+T”。,为菜单增加快捷键和加速键,2加速键的设置(1)在WorkSpace窗口中选择ResourceView选项卡,单击Accelerator项前面的“+”号,双击展开的列表项中的IDR_MAINFRAME,出现加速键资源编辑器。(2)双击加速键列表项最下面的空白项
15、,单击ID组合框的下拉按钮,从下拉列表中选择ID_GRAPH_PIE,在Key组合框中输入大写字母T。,7.2工具栏,本节内容 7.2.1 工具栏简介 7.2.2 一个使用工具栏的应用程序 7.2.3 创建工具栏资源模板 7.2.4 工具栏类CToolBar 7.2.5 在应用程序框架中创建工具栏对象 7.2.6 工具栏的消息处理机制,7.2.1工具栏简介,工具栏为用户提供了程序命令的直接访问方式,工具栏中包含有一些水平排放的图形按钮,当用一次鼠标单击它们时就发送相应的命令消息。从编程角度看,工具栏就是一个子窗口,它显示一系列位图按钮。由于工具栏按钮一般对应着某个菜单选项,因此工具栏的某个按钮
16、和菜单的某个选项除了创建的方式和在界面的显示方式不一样外,对于消息的响应都是一样的。工具栏和状态栏对象一般作为框架窗口类的成员变量声明,在创建框架窗口时自动创建它们,在销毁框架窗口时自动销毁所创建的控件栏对象。使用AppWizard创建了应用程序的基本框架后,也就建立了初始的工具栏和状态栏对象。,7.2.2一个使用工具栏的应用程序,技术要点 本程序主要掌握工具栏资源的建立方法,工具栏对命令消息的响应,熟悉一些API函数的用法,体会VC对系统的控制。,45,46,47,48,49,7.2.3 创建工具栏资源模板,工具栏也是一种资源,因此使用工具栏的首要工作是利用VC的可视化的资源编辑器进行工具栏
17、资源的创建与保存,下面为创建与编辑工具栏资源的步骤。1打开刚才创建的工程ToolBarExam。2在WorkSpace窗口中选择ResourceView选项卡,单击ToolBar项前面的“+”号展开工具栏资源项目,系统默认的工具栏的ID值为IDR_MAINFRAM。双击IDR_MAINFRAM,VC以设计模式显示出工具条,注意,若想删除无用的工具栏按钮,只需把无用的按钮脱离工具栏即可。3我们在工具条最右边的空白图标中增加两个新图标,双击创建好的图标,弹出属性对话框,设定该两个工具条按钮的ID为ID_QUIT_WINDOWS和ID_CARTOON,同时在提示栏Prompt中输入“重新启动Wind
18、ows操作系统n重新启动”和”装载动画鼠标图形n动画图标”。,7.2.4 工具栏类CToolBar,类CToolBar提供了带有位图按钮和可选分隔符的工具栏,工具栏按钮有下压式、复选框按钮或单选按钮。CToolBar对象通常是做为派生类CFrameWnd或CMDIFrameWnd框架窗口的对象成员,利用AppWizard创建应用程序框架时,在框架类中已创建了一个CToolBar对象。MFC的工具栏类CToolBar是创建用来接收某些命令键入并向用户显示状态信息的类,利用它可以立即访问程序命令。从编程的角度看,工具栏是一个显示一系列位图按钮的子窗口,一旦创建了工具栏并使其可见,就可以用操作窗口的
19、方法来操作它。工具栏的按钮和菜单或加速键一样,单击他们都生成WM_COMMAND消息,并且工具栏的命令ID与菜单或加速键的命令ID相同。下面为该类中几个重要的函数说明。,1Create()函数 Create()函数用于创建一个Windows工具栏,并将其连接到CToolBar对象上,同时设置工具条的默认高度。该函数的原型如下:BOOL Create(CWnd*pParentWnd,DWORD dwStyle=WS_CHILD|WS_VISIBLE|CBRS_TOP,UINT nID=AFX_IDW_TOOLBAR);2LoadToolBar()函数 该函数装载指定的工具栏资源,它的原型为:BO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 用户 交互 对象 菜单 工具栏 状态栏
链接地址:https://www.31ppt.com/p-6107682.html