




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第10章在MFC中创建应用程序的资源 基本控件操作在我的百度文库内也有详细资料欢迎下载 2 10 1WinCE程序中的资源 对话框 位图 资源 光标 字符串 3 在Windows的可执行文件中 资源是独立于代码的 使用单独的ResourceCompiler进行编译 并嵌入到可执行文件中 在编程过程中 代码是可复用的 资源也是可复用的 通过资源的 导入 和 导出 功能来实现资源的可复用 程序的国际化 也是通过资源来实现的 4 10 2资源的应用 5 10 2 1菜单资源的使用 创建一个 计算 菜单 6 例10 1 创建一个基于单文档结构的应用程序 在视图中显示一行字符串 HelloWorld 通过建立包含 显示 和 颜色选择 两个菜单项的 操作 菜单来控制字符串 菜单项 显示 用以控制字符串的显示与否 菜单项 颜色选择 中包含一个级连菜单 内容为 红 绿 和 蓝 三个菜单项 HelloWorld ID OPER REDID OPER GREENID OPER BLUE ID OPER SHOW 7 在My ResView h中的classCMy ResView publicCview中的public处加入如下声明 COLORREFm nColors 3 用户可选颜色数组DWORDm nColorIndex 当前所选颜色索引CStringm strShow 显示的内容BOOLm bShow 是否显示 8 在CMy ResView CMy ResView 中初始化成员变量 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 HelloWorld m bShow TRUE 在voidCMy ResView OnDraw CDC pDC 中加入如下代码绘制字符串 if m bShow pDC SetTextColor m nColors m nColorIndex 设置输出字符串颜色pDC TextOut 100 100 m strShow 输出字符串 9 若编译运行程序 可看到程序输出一行红色的字符串 但颜色设置菜单项还没有起作用下面将介绍如何通过菜单项来控制程序 在介绍菜单项的响应时 必须先了解几个消息响应机制 COMMAND消息的响应UPDATE COMMAND UI消息的响应 10 1 COMMAND消息的响应 添加了对COMMAND消息的响应之后 My ResView h发生如下变化 Generatedmessagemapfunctionsprotected AFX MSG CMy ResView afx msgvoidOnOperShow AFX MSG 11 在My ResView cpp文件中 读者会看到ID OPER SHOW对应的COMMAND消息的绑定 代码如下 BEGIN MESSAGE MAP CMy ResView CView AFX MSG MAP CMy ResView ON COMMAND ID OPER SHOW OnOperShow AFX MSG MAP StandardprintingcommandsON COMMAND ID FILE PRINT CView OnFilePrint ON COMMAND ID FILE PRINT DIRECT CView OnFilePrint ON COMMAND ID FILE PRINT PREVIEW CView OnFilePrintPreview END MESSAGE MAP 在My ResView cpp文件的最后加入如下代码 voidCMy ResView OnOperShow m bShow m bShow Invalidate 强制程序重新窗口 重新编译运行程序 可看到 显示 菜单项工作正常 12 2 UPDATE COMMAND UI消息的响应 UPDATE COMMAND UI消息是在窗口将要绘制菜单项的时候产生 上例中 仅仅只是使用 显示 菜单项来控制是否显示似乎还不够 如果 显示 菜单项能够配合主程序体现出当前是否显示的状态可能会更好一些 就像一个文本编辑软件 菜单上是 10号字 12号字 的功能 如果不在菜单上标识出来 那么使用者可能就搞不清当前的字是多大的 为ID OPER SHOW添加UPDATE COMMAND UI消息 在自动生成消息处理函数中加入如下代码 voidCMy ResView OnUpdateOperShow CCmdUI pCmdUI pCmdUI SetCheck m bShow 此时可看到随着m bShow的值的改变 显示菜单项的状态与实际是否显示字符串的状态一致了 通过菜单项前面的 标记来体现 13 voidEnable BOOLbOn TRUE 禁止或者允许该菜单项voidSetCheck intnCheck 1 设置菜单项 工具条按钮的check状态 显示标志为 voidSetRadio BOOLbOn TRUE 与SetCheck功能类似 显示标志为 voidSetText LPCTSTRlpszText 设置菜单项的Caption属性 CCmdUI类常用的方法 14 10 2 2工具条资源的创建及其使用 在Windows应用程序中 工具条可以看作是图形化的菜单 是一种更快捷 更有效 更直观的人机交互方式 1工具条类的层次位置及其常用方法 工具条由CWnd类派生的 它们都连接到一个Windows应用程序窗口 因此 CWnd的所有功能如创建 移动 显示和隐藏窗口等在用控制条工作时都是可用的 15 Create 创建一个工具条并把它附加到CToolBar对象上CreateEx 创建一个定义了边界的工具条并附加到CToolBar对象上SetSizes 设置按钮及位图大小SetHeight 设置工具条的高度LoadToolBar 装载工具条资源LoadBitmap 装载包含工具按钮图像的位图SetBitmap 设置位图图像SetButtons 设置按钮并使每个按钮与位图图像相关 CToolBar的构造方法 16 1 增加工具条资源Insert Resource Toolbar New插入新的工具条资源 2 将工具条添加到窗口中添加后 需把工具条的对象加入到应用程序框架窗口中 CMainFrame 在应用程序的CMainFrame类中加入工具条对象m wndToolBar protected CToolBarm wndToolBar 自己定义的工具条 2加入用户自定义的工具条 17 在框架窗口类的OnCreate 函数中调用工具条类的Create 或CreateEx 成员函数创建该工具条 并调用LoadToolBar 成员函数将工具条对象和前面创建的工具条资源连接在一起 if m wndToolBar Create this WS VISIBLE CBRS TOP m wndToolBar LoadToolBar IDR TOOLBAR 引入资源IDR TOOLBAR TRACE0 Failedtocreatetoolbar n return 1 failtocreate 18 3对工具条进行操作创建完成工具条后 可调用工具条类中的成员函数对工具条进行操作 例如设定工具条风格 在窗口中移动工具条 控制工具条的显隐等 当鼠标光标在按钮上暂停时 显示工具提示和命令描述 并设定工具条的大小是可变的 m wndToolBar SetBarStyle CBRS TOOLTIPS CBRS FLYBY CBRS SIZE DYNAMIC 可在程序中设置允许用户在程序运行中在框架窗口内移动工具条 这是通过调用CToolBar EnableDocking和CFrame EnableDocking来实现的 二函数原型均如下 voidEnableDocking DWORDdwStyle 19 例10 4 在 例10 3 中添加工具条 工具条中包含四个按钮 分别对应菜单的 显示 红色 绿色 和 蓝色 菜单项 该工具条可以在窗口中任意位置停靠 当鼠标停留在工具条按钮上时 将显示该按钮的功能 20 在ResourceView中加入工具条资源IDR TOOLBAR NEW 绘制四个按钮并设置相应ID 在MainFrm h中添加如下代码 声明一个CToolBar变量CToolBarm wndToolBarNew 在MainFrm cpp文件的IntCMainFrame OnCreate LPCREATESTRUCTlpCreateStruct 函数中添加如下代码 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 21 为了使新增的工具条可以在窗口中自由停靠 在OnCreate函数中 还要增加如下代码 m wndToolBarNew EnableDocking CBRS ALIGN ANY 工具条可以在父窗口内任何一边停靠EnableDocking CBRS ALIGN ANY 父窗口允许子工具条窗口在任何一边停靠DockControlBar 父窗口内按照前面指定的风格停靠该工具条 22 10 2 5图标资源的创建及其使用 例10 5 每个Windows应用程序在资源管理器中都有自己的图标 这个图标就是ICON资源 例10 5 在 例10 4 的基础上通过修改光标资源 使得执行程序的图标变为如图所示的样子 23 ResourceView Icon IDR MAINFRAME 就会看到图标编辑器 在这里可以选择图标的尺寸 默认的是16 16和32 32 16 16的图标用于程序运行时左上角图标 任务条图标 资源管理器的列表和详细信息模式 32 32的图标用于程序运行时默认对话框图标 资源管理器图标模式 48 48的图标用于资源管理器的平铺和缩略图模式 24 单击NewDeviceImage按钮对光标资源进行修改 25 10 2 6字符串资源的使用 字符串资源最主要的用途就是用于程序的多语言版本 如果要想动态切换界面语言 使用字符串资源是很好的选择 在MFC中 可以通过CString类的LoadString方法来从资源载入字符串 具体操作是打开ResourceView StringTable 在表中的空白高亮处双击 在弹出的StringProperties对话框中的ID编辑框中输入IDS STRING HELLO Caption编辑框中输入 HelloVC 26 在My ResView cpp文件的构造函数中 将原来的m strShow HelloWorld 改为 m strShow LoadString IDS STRING HELLO 这样我们的程序的输出就变为 HelloVC 了 使用字符串资源的好处就是不需要在整个程序中去寻找某个字符串 如果某些字符串可能在将来会发生变更 那么最好将它写在字符串资源中 27 10 2 7对话框资源的创建及其应用 例10 6 例10 6 在上例的基础上编写一个对话框用于接收用户输入 然后用这个输入来替换主程序原来显示的字符串 28 在创建完对话框资源之后 需要生成一个相关的对话框类 View ClassWizard CreateaNewClass OK 在Name中填入 CInputDlg 即可 29 将对话框上的IDC EDIT INPUT控件与一个CString类型的m strInput变量绑定 建立一种映射关系 上面的操作使MFC在幕后作了些什么 在InputDlg h文件中 MFC加入了如下代码 DialogData AFX DATA CInputDlg enum IDD IDD DIALOG NEW CStringm strInput AFX DATA 30 在InputDlg cpp的构造函数中 MFC加入了如下代码 AFX DATA INIT CInputDlg m strInput T AFX DATA INIT在InputDlg cpp文件的DoDataExchange函数中 MFC加入了如下代码 AFX DATA MAP CInputDlg DDX Text pDX IDC EDIT INPUT m strInput AFX DATA MAP在函数DDX Text调用中 完成了控件与变量之间的数据交换 对m strInput的初始化 31 下面要在CMy ResView中使用新创建的对话框 首先为 操作 菜单增加菜单项 修改字符串 其ID为ID OPER STRING 增加COMMAND消息响应函数OnOperString 然后在My ResView cpp文件头部include部分最后加入 include InputDlg h 在OnOperString中加入如下代码 voidCMy ResView OnOperString CInputDlgdlgInput 声明对话框变量if dlgInput DoModal IDOK 如果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年临床执业助理医师儿科学小儿年龄分期考试题(附答案)
- 2025年全国工程测量员初级理论通关模拟试题(附答案)
- 2025市级科技计划项目合同书模板
- 2025内分泌病人的护理要点考核试题及答案
- 火场安全培训目的课件
- 火力电厂保洁安全培训课件
- 2025年国际商务专业资格考试试题及答案
- 太仓中集焊工考试题库及答案
- 激活失败问题分析
- 课件中圆形变成直线
- Unit2-The-fun-they-had市公开课一等奖省赛课微课金奖课件
- 2024年河北省石家庄市轨道交通有限责任公司招聘笔试参考题库含答案解析
- 110kV变电站及110kV输电线路运维投标技术方案(第一部分)
- 项目时间安排
- 智慧生态茶园技术方案
- 常用食物含铜量表-献给有需要的人
- 健身教练增肌减脂知识讲座
- 《踝关节康复训练》课件
- 进修汇报材料课件
- (初级)游泳救生员理论考试题库(新版)
- 名校教学设计:综合与实践-哪个城市夏天更热2
评论
0/150
提交评论