第11讲_MFC中资源的应用_第1页
第11讲_MFC中资源的应用_第2页
第11讲_MFC中资源的应用_第3页
第11讲_MFC中资源的应用_第4页
第11讲_MFC中资源的应用_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第11讲在MFC中创建应用程序的资源 要点 1 创建菜单 工具栏2 创建对话框 在Windows的可执行文件中 资源是独立于代码的 使用单独的ResourceCompiler进行编译 并嵌入到可执行文件中 在编程过程中 代码是可复用的 资源也是可复用的 通过资源的 导入 和 导出 功能来实现资源的可复用 资源是Windows应用程序用户界面的重要组成部分 资源包括 菜单 工具条 对话框 位图等 通过MFC编程了解资源文件的创建与应用 VC 项目工作区的资源视图资源 Bitmap Dialog Icon Menu Toolbar 视图 资源视图 一 菜单资源的应用 VC 主菜单框架 创建一个单文档程序 例10 1 创建一个基于单文档结构的应用程序 在视图中显示一行字符串 HelloWorld 通过建立包含 显示 和 颜色选择 两个菜单项的 操作 菜单来控制字符串 菜单项 显示 用以控制字符串的显示与否 菜单项 颜色选择 中包含一个级连菜单 内容为 红 绿 和 蓝 三个菜单项 ID OPER SHOW ID OPER REDID OPER GREENID OPER BLUE 1 创建项目并生成单文档应用程序项目名 T10 Menu 类型 MFC 向导 MFC应用程序 应用程序类型 单文档生成类 CMainFrame CT10MenuApp CT10MenuDoc CT10MenuView 2 编辑菜单项双击 资源视图 Menu IDR MAINFRAME 进入菜单编辑器 选择菜单项的 属性 编辑菜单项 ID Caption Separator Pop up 3 设置属性 使用快捷菜单和属性对话框设置属性 在T10 MenuView h的CT10MenuView publicCView中声明 公有变量 classCT10MenuView publicCView public 单文档Menu中使用COLORREFm nColors 3 用户可选颜色数组DWORDm nColorIndex 当前所选颜色索引CStringm strShow 显示的内容BOOLm bShow 是否显示 4 声明全局变量 5 初始化公有变量CT10MenuView CT10MenuView m nColors 0 RGB 255 0 0 m nColors 1 RGB 0 255 0 m nColors 2 RGB 0 0 255 m nColorIndex 0 m strShow L HelloWorld m bShow TRUE 6 输出字符串voidCT10MenuView OnDraw CDC pDC if m bShow pDC SetTextColor m nColors m nColorIndex 设置输出字符串颜色pDC TextOut 100 100 m strShow 输出字符串 执行结果 窗口输出红色 HelloWorld 字符 下面将介绍如何通过菜单项来控制程序 在介绍菜单项的响应时 必须先了解几个消息响应机制COMMAND消息 单击菜单项时产生 映射菜单项的处理函数UPDATE COMMAND UI消息 绘制菜单项时产生 决定菜单项的状态消息响应机制 1 在 View h中声明菜单项的处理函数2 在 view cpp中完成COMMAND与菜单项处理函数的绑定3 在 view cpp中编写菜单项处理函数 ON COMMAND RANGE 响应连续对象ID的若干个COMMAND消息而提供ON UPDATE COMMAND UI RANGE 实现若干个菜单项状态更新对 颜色 red green blue 菜单项的处理方法1 确定R G B的ID号连续2 手动添加ON COMMAND RANGE消息映射a声明OnColorChange函数b完成ON COMMAND RANGE消息与OnColorChange函数的绑定c编写OnColorChange函数 7 显示菜单项 COMMAND COMMAND消息在用户单击菜单项时产生 用来控制菜单项 操作 选择 显示 菜单项 快捷菜单 添加事务处理程序 选COMMAND消息 CT10MenuView类 在对应函数OnOperShow 中添加代码 在T10 MenuView cpp中增添OnOperShow 函数voidCT10MenuView OnOperShow m bShow m bShow 强制程序刷新窗口Invalidate 执行结果 可看到 显示 菜单项工作正常 8 显示菜单项标记 UPDATE COMMAND UI UPDATE COMMAND UI消息是在窗口将要绘制菜单项的时候产生 上例中 仅仅只是使用 显示 菜单项来控制是否显示似乎还不够 如果 显示 菜单项能够配合主程序体现出当前是否显示的状态可能会更好一些 为ID OPER SHOW添加UPDATE COMMAND UI消息 在OnUpdateOperShow函数中加入如下代码 voidCT10MenuView OnUpdateOperShow CCmdUI pCmdUI pCmdUI SetCheck m bShow 设置菜单项标志 执行结果 显示菜单项的状态与实际是否显示字符串的状态一致 通过菜单项前面的 标记来体现 voidEnable BOOLbOn TRUE 禁止或者允许该菜单项voidSetCheck intnCheck 1 设置菜单项 工具条按钮的check状态 显示标志为 voidSetRadio BOOLbOn TRUE 与SetCheck功能类似 显示标志为 voidSetText LPCTSTRlpszText 设置菜单项的Caption属性 CCmdUI类常用的方法 8 处理显示多个菜单项 ON COMMAND 方法1 选择菜单项ID ID OPEN RED 其COMMAND消息voidCT10MenuView OnOperRed m nColorIndex 0 改变字体颜色Invalidate 选择菜单项ID ID OPEN GREEN 其COMMAND消息voidCT10MenuView OnOperGreen m nColorIndex 1 改变字体颜色Invalidate 选择菜单项ID ID OPEN BLUE 其COMMAND消息voidCT10MenuView OnOperBlue m nColorIndex 2 改变字体颜色Invalidate 执行结果 可以通过菜单项来改变 HelloWorld 字符的颜色 8 处理显示多个菜单项 ON COMMAND RANGE 方法2 在T10 MenuView h中声明ON COMMAND RANGE消息的处理函数OnColorChange afx msgvoidOnColorChange UINTnID 在T10 MenuView cpp中完成消息映射 ON COMMAND RANGE ID OPER RED ID OPER BLUE OnColorChange voidCT10MenuView OnColorChange UINTnID m nColorIndex nID ID OPEN RED 改变字体颜色Invalidate 执行结果 可以通过菜单项来改变 HelloWorld 字符的颜色 9 处理显示多个菜单项标记 ON UPDATE COMMAND UI RANGE ON UPDATE COMMAND UI RANGE消息在选中的菜单项前加标记在T10 MenuView h中声明ON UPDATE COMMAND UI RANGE消息的处理函数 afx msgvoidOnUpdateColorChange CCmdUI pCmdUI 在T10 MenuView cpp中完成消息映射 ON UPDATE COMMAND UI RANGE ID OPER RED ID OPER BLUE OnUpdateColorChange 在My ResView cpp中 添加OnUpdateColorChange函数 并加入以下代码 voidCMy ResView OnUpdateColorChange CCmdUI pCmdUI 显示标记 pCmdUI SetRadio m nColorIndex pCmdUI m nID ID OPER RED 执行结果 显示颜色菜单项的状态与实际显示字符串的颜色一致 通过菜单项前面的 标记来体现 例11 1 小结操作步骤类函数与变量创建单文档项目文件My Res编辑主菜单IDR MAINFARME添加菜单项声明视图类成员变量CMy ResView hm nColorsm nColorIndex m strShor m bShow初始化视图类成员变量CMy ResViewCMy ResView视图类输出显示CMy ResViewOnDraw添加菜单项的COMMAND消息UPDATE COMMAND UI消息CMy ResView 二 工具条资源的应用 在Windows应用程序中 工具条可以看作是图形化的菜单 是一种更快捷 更有效 更直观的人机交互方式 1工具条类的层次位置及其常用方法 工具条由CWnd类派生的 它们都连接到一个Windows应用程序窗口 因此 CWnd的所有功能如创建 移动 显示和隐藏窗口等在用控制条工作时都是可用的 Create 创建一个工具条并把它附加到CToolBar对象上CreateEx 创建一个定义了边界的工具条并附加到CToolBar对象上SetSizes 设置按钮及位图大小SetHeight 设置工具条的高度LoadToolBar 装载工具条资源LoadBitmap 装载包含工具按钮图像的位图SetBitmap 设置位图图像SetButtons 设置按钮并使每个按钮与位图图像相关 CToolBar的构造方法 1 增加工具条资源在资源视图中选择Toolbar资源 快捷菜单 插入Toolbar 2 将工具条添加到窗口中 系统自动完成 在应用程序的MainFra h中加入工具条对象的成员变量在MainFrame cpp的OnCreate 函数中调用工具条类的Create 或CreateEx 成员函数创建该工具条 并调用LoadToolBar 成员函数加载工具条 2加入用户自定义的工具条 3对工具条进行操作创建完成工具条后 可调用工具条类中的成员函数对工具条进行操作 例如设定工具条风格 在窗口中移动工具条 控制工具条的显隐等 当鼠标光标在按钮上暂停时 显示工具提示和命令描述 并设定工具条的大小是可变的 m wndToolBar SetBarStyle CBRS TOOLTIPS CBRS FLYBY CBRS SIZE DYNAMIC 可在程序中设置允许用户在程序运行中在框架窗口内移动工具条 这是通过调用CToolBar EnableDocking和CFrame EnableDocking来实现的 例10 2 在上例的基础上添加工具条 工具条中包含四个按钮 分别对应菜单的 显示 红色 绿色 和 蓝色 菜单项 该工具条可以在窗口中任意位置停靠 当鼠标停留在工具条按钮上时 将显示该按钮的功能 1 添加工具条资源在资源视图中选择Toolbar资源 快捷菜单 插入Toolbar 工具条ID IDR TOOLBAR NEW绘制四个按钮并双击按钮设置相应ID 每个按钮的ID与相应菜单项的ID绑定 ID OPER SHOW ID OPER REDID OPER GREENID OPER BLUE 2 声明CToolBar变量在MainFrm h中添加如下代码 声明一个新的工具栏变量CToolBarm wndToolBarNew 3 创建 加载工具条在MainFrm cpp文件的CMainFrame OnCreate函数中添加如下代码 if m wndToolBarNew CreateEx this TBSTYLE FLAT WS CHILD WS VISIBLE CBRS TOP CBRS GRIPPER CBRS TOOLTIPS CBRS FLYBY CBRS SIZE DYNAMIC m wndToolBarNew LoadToolBar IDR TOOLBAR NEW TRACE0 Failedtocreatetoolbar n return 1 failtocreate 4 新增的工具条在窗口中自由停靠为了使新增的工具条可以在窗口中自由停靠 在CMainFrame OnCreate函数中 还要增加如下代码 m wndToolBarNew EnableDocking CBRS ALIGN ANY 工具条可以在父窗口内任何一边停靠EnableDocking CBRS ALIGN ANY 父窗口允许子工具条窗口在任何一边停靠DockControlBar 父窗口内按照前面指定的风格停靠该工具条 例10 2 小结操作步骤类函数与变量增加工具条资源IDR TOOLBAR NEW声明框架类成员变量在MainFrm h中m wndToolBarNew创建 加载工具条在MainFrm cpp中CMainFrame OnCreateOnCreate中使用的函数CreateExLoadToolBarEnableDocking 三 话框资源的应用 例10 3 在上例的基础上编写一个对话框用于接收用户输入 然后用这个输入来替换主程序原来显示的字符串 在创建完对话框资源之后 需要生成一个相关的对话框类 选择新建的对话框 快捷菜单 添加类在Name中填入 CInputDlg 即可 1 生成对话框 在资源视图中 选择Dialog 快捷菜单 插入Dialog ID IDD DIALOG NEW控件ID EditBox IDC EDIT INPUTButton IDOKButton IDCANCEL DDX 对话框数据交换 MFC通过DDX技术在控件和数据类型之间建立一种绑定关系 实现控件变量和数据变量之间交换数据 对话框上的IDC EDIT INPUT控件与一个CString类型的m strInput变量绑定 建立一种映射关系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论