




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章菜单 工具栏与状态栏 VisualC 程序设计与应用教程 4 1菜单4 2工具栏4 3状态栏4 4应用实例 2 4 1菜单 4 1 1菜单的类型常见菜单有3种 主菜单 弹出菜单和快捷菜单 1 主菜单指出现在应用程序主窗口或最上层窗口的菜单 通常对应有一个弹出菜单作为它的子菜单 3 2 弹出菜单指选择主菜单或一个菜单项时弹出的子菜单 3 快捷菜单当右击某个界面对象时 通常会弹出快捷菜单 它出现在鼠标箭头的位置 快速展示当前对象可用的命令功能 4 菜单设计一般需要经过下面两步 1 使用菜单编辑器编辑菜单资源 2 使用ClassWizard进行消息映射 编辑成员函数 完成菜单所要实现的功能 5 4 1 2编辑菜单使用菜单编辑器来编辑菜单资源 双击ResourceView视图中的Menu菜单资源 打开菜单编辑器 6 1 插入新菜单项在当前空白菜单项位置插入选定窗口中的空白菜单项后按回车键 或双击空白菜单项 系统弹出菜单属性对话框 在某菜单项前插入选中该菜单项并按Ins键 再双击该空白菜单项进行编辑 7 2 属性对话框的设置用于输入菜单项的标识符 ID 标题 Caption 和菜单项在状态栏上显示的提示 Prompt 信息等 菜单项的标识符 ID 菜单项在状态栏上显示的提示信息 标题 8 9 3 调整菜单项位置选中某菜单项将其拖至适当位置 4 删除菜单项用鼠标单击菜单项或用上 下 左 右光标键选择菜单项 然后单击Cut按钮或按Del键删除 10 例4 1 编写一个单文档应用程序MyDraw 在菜单栏中增加一个 绘图 主菜单 并在其中添加 矩形 和 椭圆 两个菜单项 11 4 1 3建立消息映射在上例中仅添加了菜单 并没有实现菜单的功能 即没有对应的命令处理函数与菜单项对应 因此 添加的菜单项是灰色的 即处于当前不可用状态 添加新的菜单项后 还应该为菜单项指定一个处理函数 即利用ClassWizard类向导添加一个消息处理函数 12 例4 2 为例4 1中增加的菜单项添加消息处理函数 13 4 1 4菜单的有效控制一般情况下 菜单项都不止一种状态 例如 在没有选择任何内容时 Edit菜单下的Copy Cut等菜单项是无效的 灰色显示 有时 我们还会看到 在菜单项旁边可能还会有检查标记 表示它是选中的还是不选中的 比如 在Word的视图菜单项下 当用户选用 网格线 或 标尺 时 相应菜单项前会出现一个 MFC通过消息映射机制和CCmdUI类更新菜单项的显示 14 在类向导ClassWizard的MessageMap标签中 如果选择一个菜单ID 在Messages列表框中就会出现以下两项 COMMANDUPDATE COMMAND UI其中UPDATE COMMAND UI是更新命令用户接口消息 专门用于处理菜单项和工具条按钮的更新 15 例4 3 为例4 2的程序MyDraw添加更新用户界面的消息处理函数 使程序启动时菜单项 椭圆 处于不可用状态 当用户单击 矩形 菜单项后 在菜单项前显示 标记 并使 椭圆 菜单项变为可用 16 4 1 5快捷菜单为应用程序创建快捷菜单主要有以下两种方法 1 使用ComponentGallery创建快捷菜单ComponentGallery 组件画廊 是一个组件库 它保存着可以共享或重用的代码 这些代码包括由VisualC 自带的组件和从用户工程中增加到Gallery中去的用户自定义组件 17 例4 4 为例4 3中的应用程序MyDraw增加一个快捷菜单 程序运行后 用户在视图窗口中右击 弹出一个快捷菜单 显示主菜单 绘图 下的所有菜单项 快捷菜单 18 2 使用TrackPopupMenu 函数创建快捷菜单使用菜单资源编辑器和CMenu TrackPopupMenu 函数来创建右键快捷菜单 CMenu TrackPopupMenu函数的原型为 BOOLTrackPopupMenu UINTnFlags intx inty CWnd pWnd LPCRECTlpRect NULL 该函数的功能是显示一个右键快捷菜单 其中 nflags表示屏幕位置标志 见下表 x y分别表示菜单的水平坐标和顶端的垂直坐标 pWnd表示弹出菜单的窗口 包括全部的WM COMMAND消息 lpRect表示一个矩形域 当单击这个矩形域时菜单不消失 19 参数nflags的含义 20 例4 5 使用TrackPopupMenu 函数创建例4 3中的快捷菜单 21 4 1 6创建动态菜单动态创建菜单分为以下3个步骤 1 利用CreateMenu 函数创建一个空的弹出式菜单 该函数的原型为 HMENUCreateMenu 该函数没有参数 它的返回值是一个菜单句柄 2 调用AppendMenu 或InsertMenu 函数在菜单中加入菜单项 3 调用函数SetMenu 加载动态菜单 22 例4 6 为例4 4中的应用程序MyDraw创建一个 画笔 动态菜单 程序运行后 用户单击 绘图 矩形 菜单项 在主菜单中添加动态菜单 画笔 并通过此菜单的子菜单项画一个红色矩形 23 4 1 7创建基于对话框的菜单从第2章可知 利用MFCAppWizard exe 向导工具可以生成基于对话框的应用程序 基于对话框的应用程序在运行时并没有菜单栏 下面我们通过实例来讨论如何给它创建一个菜单 24 例4 7 编写一个基于对话框的应用程序Li4 7 为该应用程序添加一个菜单 菜单包括 文件 编辑 视图 和 帮助 4个主菜单项 25 4 2工具栏 在MFC中 工具栏的功能由类CToolBar实现 工具栏资源和工具栏类CToolBar是工具栏的两个要素 创建工具栏的基本步骤是 l创建工具栏资源 l构建一个CToolBar对象 l调用CToolBar Create 或CreateEx 函数创建工具栏窗口 l调用CToolBar LoadToolBar载入工具栏资源 26 4 2 1编辑工具栏使用工具栏编辑器来编辑工具栏资源 双击ResourceView视图中的Toolbar工具栏资源 即可打开工具栏编辑器 27 1 添加按钮双击工具条上的空白按钮或单击空白按钮后 选择 View Properties 菜单项 弹出如图所示的ToolbarButtonProperties属性对话框 在此对话框中编辑按钮的标识符 宽度与高度值 28 2 删除按钮将按钮拖出工具栏外 即可删除该按钮 3 编辑按钮位图设置按钮位图有以下两种方法 l利用绘图工具与调色板直接进行绘制l先利用专用绘图软件制作 然后粘贴到按钮上 29 4 2 2建立消息映射通常 只需让一个按钮的ID值与同样功能菜单项的ID值相同即可 如果按钮没有对应菜单项 则必须利用ClassWizard类向导添加一个消息处理函数 30 例4 8 编写一个单文档应用程序Li4 8 删除默认工具栏上的 打印设置 按钮 并在 帮助 按钮前添加 上一页 和 下一页 2个按钮 当用户单击这两个按钮后 视图中分别显示文本 这是 上一页 按钮 和 这是 下一页 按钮 31 4 2 3自定义工具栏的操作向导生成的标准工具栏的ID值为IDR MAINFRAME 对一些功能复杂的应用程序 需要创建多个不同的工具栏 生成工具栏的基本步骤 1 添加工具栏资源 2 参照MFC应用程序框架添加工具栏的方法 构造一个CToolBar类的对象 调用CToolBar Create 或CreateEx 函数创建工具栏窗口 3 调用CToolBar LoadToolBar 函数载入工具栏资源 除这些基本步骤之外 还可以调用其他相关函数从而进一步改善工具栏 32 1 创建工具栏窗口调用CToolBar Create 或CreateEx 函数创建并初始化工具栏窗口对象 若创建成功 函数返回TRUE 否则返回FALSE 2 装载工具栏资源调用LoadToolBar 函数装载工具栏资源 用Create 或者CreateEx 函数创建工具栏 其实只是获得了一个窗口句柄 工具栏窗口中位图按钮的加载是靠LoadToolBar 函数来完成的 若加载成功 将返回TRUE 否则返回FALSE 33 3 设置工具栏风格如果在调用初始化函数CToolBar Create 或者CreateEx 时设置的工具栏风格不满足需要 可以再用SetBarStyle 函数重新进行设置 4 设置工具栏停靠特性设置工具栏停靠特性 需要调用EnableDocking 函数 既要调用CControlBar EnableDocking 函数设置工具栏的停靠特性 还要调用框架类的成员函数EnableDocking 函数来设置框架窗口以允许它的子窗口控制栏可以以何种方式停靠 不管一个框架窗口中有多少个子窗口控制栏 该函数只需调用一次 34 5 设置工具栏的初始停靠位置通过调用CFrameWnd DockControlBar 函数定位一个工具栏的初始停靠位置 6 移动工具栏调用CFrameWnd FloatControlBar 函数来移动 定位一个工具栏 7 工具栏隐显控制通过对函数CWnd SetStyle 的调用可以改变某些工具栏窗口的风格 但该函数不能改变WS VISIBLE 只能通过父类CWnd的ShowWindow 成员函数来显示或隐藏工具栏 35 例4 9 编写一个单文档应用程序Li4 9 为该应用程序创建一个带有 线 圆 矩形 和 文本 4个按钮的工具栏 当用户单击工具栏上的按钮时 在窗口中显示相应的图形 36 4 3状态栏 状态栏实际上是一个窗口 一般分为几个窗格 每个窗格显示不同的信息 使用AppWizard创建的单文档应用程序 接受默认选项时 生成的应用程序自动创建带有默认窗格的状态栏 37 4 3 1状态栏类的继承关系在MFC中 状态栏的功能由CStatusBar类实现 38 4 3 2状态栏类的成员函数 39 4 3 3状态栏操作 利用MFCAppWizard向导创建应用程序时 首先在CMainFrame类中定义一个成员变量m wndStatusBar 它是状态栏类CStatusBar的对象 其次在MFC应用程序框架的实现文件MainFrm cpp中 为状态栏定义一个静态数组indicators 如下所示 staticUINTindicators ID SEPARATOR 显示命令功能提示ID INDICATOR CAPS 显示大写锁定键状态ID INDICATOR NUM 显示数字锁定键状态ID INDICATOR SCRL 显示滚动锁定键状态 40 这个全局的提示符数组indicators中的每个元素代表状态栏上一个窗格的ID值 这些ID在应用程序的串表资源StringTable中进行了说明 通过增加新的ID标识来增加用于显示状态信息的窗格 状态栏显示的内容由数组indicators决定 需要在状态栏中显示的各窗格的标识符 位置以及个数也由该数组决定 状态栏显示的内容是可以修改的 41 最后CWnd Create 函数以主框架窗口为父窗口创建状态栏 创建后默认停靠在主框架窗口的底部 CWnd SetIndicators indicators sizeof indicators sizeof UINT 函数将创建后的状态栏分隔为sizeof indicators sizeof UINT 个窗格 窗格的ID分别为indicators数组中的元素值 42 一个应用程序只有一个状态栏 所以对状态栏的操作主要是对状态栏上窗
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 检验专业副高试题及答案
- 单招专业的试题及答案
- 针推专业试题及答案
- 2025年深圳技校考试题目及答案
- 2025年基本常识单招真题及答案
- 产品效果评估表-用户反馈数据
- 2025年广东安全员要求考试试题及答案
- 农村信用社绵阳市盐亭县2025秋招面试典型题目及参考答案
- 安全管理考试题库及答案
- 农民种植养殖业物资供应合同
- 精麻药品培训知识课件
- 2025细胞与基因治疗科研领域蓝皮书
- 2025年财务核算招聘笔试模拟题
- 2025年高考语文全国二卷真题拓展:语言文字运用“衔接+感情色彩+关联词语+错别字”
- 2025年司法考试题库(附答案)
- 仪表工安全基础知识培训课件
- ISO9001质量管理体系培训
- 光电检测技术及应用 周秀云
- 2025至2030中国糠醛衍生物市场未来趋势及发展态势展望报告
- VW 50134-EN-2024 PA6用于车辆内部外部的成品零件 材料要求
- 山东省国企资产管理办法
评论
0/150
提交评论