单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第6章 菜单、工具栏和状态栏编程,菜单、工具栏和状态栏是一个完善的Windows应用程序的重要组成部分(但不是必需的部分)。在Windows写字板应用程序中,菜单栏、工具栏、状态栏及其所包含的元素,6.1 菜单及其相关资源的使用,菜单是Windows与用户交互的标准接口之一,Windows的大多数应用程序都提供了菜单操作。当一个菜单项被选中时,它发出一个命令消息,从而引发相应的消息处理函数的执行。,6.1.1 菜单的种类及开发步骤,在Windows窗口中,菜单有两种标准风格:下拉菜单和弹出菜单(也称上下文菜单)。,下拉菜单:一般在应用程序窗口的顶部罗列了一行按类别排列的菜单。如果用户选择了某一类别,就会显示一个下拉式菜单。图6.1所示即为下拉菜单。,弹出菜单:一般在应用程序窗口区域的中间弹出显示,在应用程序工作区域上面处于自由浮动状态。在写字板输入窗口中,单击鼠标右键,即出现弹出式菜单,如图6.2所示。,6.1.2 菜单的创建与编辑,在Visual C+6.0中,使用MFC AppWizard生成的文档/视图结构的应用程序,系统已为框架创建了一个标准的主菜单,包括文件、编辑、视图、窗口帮助等标准菜单,定义了各菜单项的ID及相应的命令处理函数。一般只需要通过菜单资源编辑器,在已有主菜单的基础上添加、设计需要的菜单项即可。,6.1.3 菜单消息,MFC程序可以处理两种菜单消息:WM_COMMAND:为菜单命令消息,当选择菜单项、工具栏按钮或加速键之一会发出菜单命令消息,MFC依据一定的消息传递途径将消息传递给相应的处理函数进行处理,如果在消息传递途径的消息映射表中找不到相应的处理函数,该菜单项或按钮会被禁止使用。UPDATE_COMMAND_UI:为菜单更新消息,处理菜单状态的动态变化。如希望根据程序的执行状态,激活或禁用某些菜单项,设置选中标记,或更改菜单项文字等,就要定义这一消息处理函数。,6.1.4 菜单命令消息的处理,定义好菜单项及其ID后,就需要为菜单命令添加响应函数。实现方法是借助ClassWizard,在需要响应菜单命令的类的消息映射表中增加一个入口,即定义一个命令消息ON_COMMAND宏。下面就以为“圆形”菜单命令项添加WM_COMMAND消息处理函数为例,讲解处理菜单消息的实现过程。(具体内容请参照本书),6.1.5 菜单更新消息的处理,一般情况下,菜单项具有不止一种状态,经常需要根据应用的内部状态来对菜单项作相应的改变。(具体内容请参照本书),6.1.6 为菜单项设置快捷键,快捷键的主要作用就是在选择菜单命令时,不用鼠标而用事先定义的组合键。如在Word软件中,用户可以使用“CtrlC”组合键复制文本,而使用“CtrlV”组合键粘贴文本。这样做的好处就是熟练操作应用程序的用户可以不用鼠标,用键盘直接同应用程序实现交互。下面就对程序“Ch6Demo1”新创建的菜单项“圆形”和“矩形”分别添加快捷键“Ctrl+Y”、“Ctrl+J”。,6.1.7 弹出菜单的创建与使用,弹出菜单一般在单击鼠标右键时出现,在应用程序工作区域上面处于自由浮动状态,也称为上下文菜单。与下拉菜单的最大不同是,弹出菜单需要用户手工编程动态加载。下面就为前面创建的“Ch6Demo1”程序创建一个绘图操作的弹出菜单,在单击鼠标右键时,菜单弹出,菜单显示的内容与“绘图”下拉菜单完全相同。,6.2 工具栏的使用,工具栏是一个包含一个或多个命令按钮的窗口,一般情况下附着在窗口客户区上方菜单栏下面,也可作为一个浮动的小窗口。工具栏为菜单命令提供可视化的快捷操作方式,模拟大部分的菜单行为。,6.2.1 工具栏的创建,在使用MFC AppWizard创建基于文档/视图结构的MFC应用程序项目时,如前面创建的SDI程序“Ch6Demo1”,在应用向导的MFC AppWizard Step 4的时候,默认选中了“Docking toolbar”,(具体内容请参照本书),6.2.2 编辑工具栏,创建了工具栏后,就需要编辑工具栏资源。工具栏资源由一组按钮组成,每个按钮是一个16色位图图标,工具栏编辑器提供一个简单的位图编辑器,点击某个图标即可编辑它。,6.2.3 工具栏命令处理,与菜单命令项相同,MFC程序可以处理两种工具栏按钮消息:命令消息WM_COMMAND和更新消息UPDATE_COMMAND_UI。通过ClassWizard可以方便地为工具按钮添加WM_COMMAND和UPDATE_COMMAND_UI消息映射和消息处理函数。其实现过程与菜单项完全相同,,6.2.4 工具栏类CToolBar的简单介绍,在MFC中,CToolBar类包揽了创建工具栏的主要工作。类CToolBar提供了带有位图按钮和可选分隔符的工具栏。工具栏按钮可以是下压式按钮、复选按钮或单项按钮。CToolBar对象通常被嵌入派生于类CFrameWnd或CMDIFrameWnd的框架窗口对象的成员。,6.3 状态栏的使用,状态栏是一个水平长条,位于应用程序主窗口的底部。它可以分割成几个窗格,用来显示多组信息。,6.3.1 状态栏的创建,在使用MFC AppWizard创建基于文档/视图结构的MFC应用程序项目时,如前面创建的SDI程序“Ch6Demo1”,在应用向导的MFC AppWizard Step 4的时候,默认选中了“Initial status bar”,(具体内容请参照本书),6.3.2 状态栏编程,本节也将通过具体的实例讲解状态栏编程的过程。所实现的目标是在“Ch6Demo1”工程已有状态栏的基础上,添加一个状态栏窗格,用于显示系统当前时间,时间精确到秒,即每秒要更新一次。(具体内容请参照本书),6.3.3 状态栏类CStatusBar的简单介绍,在MFC中,CStatusBar类包揽了创建状态栏的主要工作。与CToolBar类相同,CStatusBar类同样派生于CControlBar类,CStatusBar类在MFC中的继承关系(具体内容请参照本书),