第四章 MFC资源统管理.docx

上传人:b****5 文档编号:6431369 上传时间:2023-01-06 格式:DOCX 页数:50 大小:1.30MB
下载 相关 举报
第四章 MFC资源统管理.docx_第1页
第1页 / 共50页
第四章 MFC资源统管理.docx_第2页
第2页 / 共50页
第四章 MFC资源统管理.docx_第3页
第3页 / 共50页
第四章 MFC资源统管理.docx_第4页
第4页 / 共50页
第四章 MFC资源统管理.docx_第5页
第5页 / 共50页
点击查看更多>>
下载资源
资源描述

第四章 MFC资源统管理.docx

《第四章 MFC资源统管理.docx》由会员分享,可在线阅读,更多相关《第四章 MFC资源统管理.docx(50页珍藏版)》请在冰豆网上搜索。

第四章 MFC资源统管理.docx

第四章MFC资源统管理

第4章资源和资源编辑器

精讲

VC++集成开发环境提供了资源编辑器,支持窗口应用程序的可视化开发,自动生成和管理资源代码。

本章将介绍VC++所支持的资源,及使用资源编辑器编辑资源的方法。

学习了本章,你将学会资源编辑器的使用,在应用程序中操作菜单、工具栏和状态栏。

4.1资源与资源编辑器

4.1.1资源和资源符号

资源作为一种界面成分,可以从中获取信息并在其中执行某些动作。

VC++6.0可以处理的资源有加速键(Accelerator)、位图(Bitmap)、光标(Cursor)、对话框(DialogBox)、图标(Icon)、菜单(Menu)、串表(StringTable)、工具栏(Toolbar)和版本信息(VersionInformation)等。

VC++在内部使用资源符号来标识资源,资源符号是映射到某个整数值的一串字符,是一种标识符。

从而使资源能够以字符串的方式被引用。

每当创建一个新的资源或资源对象时,系统就会为其提供一个默认的资源符号名称并赋一个整数值,该定义保存在resource.h文件中。

DevelopStudio提供了资源符号的查看和编辑工具,使用菜单命令View->ResourceSymbol来打开资源符号浏览器ResourceSymbols对话框,如图4-1所示,列表中列出了当前项目正在使用的资源符号的名称和相应的整数值。

若选中“Showread-onlysymbols”复选框,则只读状态和未被使用的资源符号也一并显示出来。

图4-1ResourceSymbols对话框

在资源符号浏览器ResourceSymbols对话框中,可以方便地新建、更改和删除资源符号,单击按钮“ViewUse”自动进入到某个资源对应的编辑器中。

在同一项目中,资源符号不能重复。

资源符号的命名通常带有描述性的前缀来表示所代表的资源或对象类型,表4-1是VC++6.0中提供的一些定义资源符号常用的前缀。

 

表4-1资源符号定义的常用前缀

类别

资源符号前缀

代表的资源或对象

资源

 

IDR_

IDD_

IDC_

IDI_

IDB_

加速键或菜单及相关资源

对话框资源

光标资源

图表资源

位图资源

菜单项命令控制

 

IDM_

ID_

IDC_

菜单项

命令项

控件

字符串

IDS_

IDP_

字符串表中的字符串

消息框中使用的字符串

资源符号的取值有一定的限制。

资源(加速键、位图、光标、对话框、图标、菜单、串表、工具栏和版本信息)的符号值范围为十进制的0~32767,而资源控件(如对话框控件或串表中的串)的符号值范围为0~65535或0~32767。

4.1.2资源编辑器

DevelopStudio提供了功能强大、易于使用的资源编辑器,用于创建和修改应用程序的资源。

使用资源编辑器,可以创建新的资源,修改、拷贝已有的资源,删除不再需要的资源。

例如可以用加速键编辑器处理加速键表,用图形编辑器处理图形资源(工具栏、位图、光标和图标等),用对话编辑器处理对话框,用菜单编辑器处理菜单等等。

创建或打开资源时,系统将自动打开相应的编辑器。

1创建资源

如果要创建新的资源,选择Insert->Resourcre菜单命令,弹出InsertResourse对话框,如图4-2所示。

ResourseType列表选择资源类型,然后单击“New”按钮。

新创建的资源将加入到当前资源(.rc)文件中,相应的资源编辑器也会打开。

例如插入一个新的Menu,菜单编辑器就会打开。

图4-2InsertResourse对话框

2编辑资源

VC++提供了可视化工具资源编辑器编辑资源,资源编辑器有很多公共操作。

例如,你一旦学会了如何创建和打开一个对话框资源,你就能使用同样的步骤去创建和打开其它的资源。

使用资源编辑器能够

(1)查看资源

(2)使用资源模板

(3)导入和导出资源

(4)查看和编辑属性页

DeveloperStudio使用项目工作区的ResouceView面板统一组织和管理来查看资源,如图4-3所示。

首次打开ResourceView面板时,系统自动压缩每个资源分类,可单击“+”标记来扩展每一分类。

图4-3项目工作区窗口的ResourceView面板

资源编辑器主要包括:

(1)对话框编辑器(DialogEditor)

(2)菜单编辑器(MenuEditor)

(3)加速键编辑器(AcceleratorEditor)

(4)工具栏编辑器(ToolbarEditor)

(5)版本信息编辑器(VersionInformationEditor)

(6)字符串编辑器(StringEditor)

(7)图形编辑器(GraphicsEditor)

下面对每一类编辑器的使用作简要介绍:

(1)对话框编辑器

使用对话框编辑器可以创建或编辑一个对话框模板或者对话框资源,如图4-4所示。

常用操作包括:

1增加、删除和编辑控件

2改变Tab顺序

3布置控件位置

4测试一个对话框窗口

图4-4对话框编辑器

(2)菜单编辑器

使用菜单可以在一个工程项目中直观,有组织地安排命令。

菜单编辑器提供了创建和编辑窗口菜单的图形界面,使用菜单编辑器,可以创建标准菜单和菜单选项,为菜单或菜单选项定义热键、加速键和状态栏提示。

也可以创建快捷菜单,以便用鼠标右按钮来执行要频繁使用的命令。

建立菜单或菜单项后,可以用ClassWizard为菜单项映射函数并编写要执行的代码。

图4-5菜单编辑器

如图4-5所示。

双击任意一个菜单项,可以打开一个菜单项属性对话框,常用操作包括:

2创建标准菜单和命令

3创建弹出菜单命令

4设置快捷键、加速键和菜单命令项的状态栏消息

5移动菜单命令

(3)加速键编辑器

加速键表列出了窗口资源中加速键和相应的命令ID。

通常,加速键所对应的命令,都对应着一个菜单命令。

使用加速键编辑器可以维护加速键列表,如图4-6所示,常用操作包括:

1增加、删除、改变和浏览加速键列表

2浏览并改变加速键表资源ID

3将一个加速键与一个菜单命令相联系

图4-6加速键编辑器

(4)工具栏编辑器

工具栏编辑器可以帮助你创建工具栏资源,也可将位图转化为工具栏资源。

工具栏编辑器的使用上很类似于画图工具,如图4-7所示,常用操作包括:

1创建工具栏和按钮

2将位图转化为工具栏资源

3创建、移动、和编辑工具栏按钮

图4-7工具栏编辑器

对工具按钮的设置由两部分构成:

一是使用图形工具栏编辑位图;二是在工具按钮属性对话框中输入工具按钮的ID。

一般工具按钮的ID是一个已定义的菜单项的ID,也可以定义一个新的ID,但要对这个新定义的ID定义消息处理函数。

添加一个工具按钮,只需对最后一个空白按钮做以上两部分操作,再将按钮拖到合适的位置。

删除一个工具按钮,只需使用鼠标将按钮拖出工具栏,抛弃即可。

通过鼠标的拖动操作,可以方便调整按钮在工具栏上的位置。

(5)版本编辑器

版本信息包括公司和产品的信息、语言、序列号、版权和商标的声明,版本信息编辑器帮助创建并方便地维护这些信息,如图4-8所示。

例如:

需要修改公司名称,可按照下列步骤:

(b)在ResourceView中,双击版本信息资源(VS_VERSION_INFO)

(c)在对象列表中找到项目:

CompanyName

(d)左键单击“CompanyName”,出现文本框,填入合适的内容。

同样的步骤可以修改其他版本信息。

 

图4-8版本信息编辑器

(6)字符串编辑器

字符串列表包括了一个应用程序中所有标识符的ID、数值和名称。

例如,状态栏的提示。

使用字符串编辑器可以创建或编辑一个字符串,如图4-9所示,常用操作包括:

1查找一个字符串记录

2增加一个字符串记录

3删除一个字符串记录

4移动一个字符串记录到另一个段

5移动一个字符串记录到另一个资源文件(*.rc)

6改变一个字符串的值或它的ID

7增加格式或特殊字符到一个字符串

注意:

不能创建一个空字符串表,如果创建了一个空的字符串表,DevelopStudio在退出的时候会自动删除。

图4-9 字符串编辑器

(7)图形编辑器

图形编辑器是用于画位图、图标和鼠标的工具,同时支持工具栏位图的创建,如图4-10所示。

图4-10 图形编辑器

3保存或删除资源

从前面的讲述中可以知道,开发者使用可视化界面编辑资源的信息,由Developstudio自动保存在.rc和.h两个文件中。

当使用资源编辑器修改了资源,在ResourceView中树形结构的根结点文件夹的最右边会出现‘*’,表示修改后还未存盘。

保存操作是执行菜单命令File->SaveAll,保存后‘*’号将消失。

要删除一个资源,只需在ResourceView的树目录中选中该资源的ID图标,直接单击“Delete”按键,该资源将从资源管理器中删除。

4.1.3编辑器使用实例

【例4-1】文本编辑器的实现。

要求文本编辑器可以在视图窗口内接收键盘输入并编辑文本,能将文本存盘并从磁盘装入文本文件;具有撤消、选择、复制、剪切、粘贴、查找、替换等功能,基本上实现类似记事本的功能。

同时需要修改该编辑器的程序图标。

设计思路:

MFC类库的CEditView类不仅提供了在视图中使用CEdit控件的功能,还提供了实现简单文本编辑器的功能,因此,只要在用AppWizard生成Exam4_1的基本框架时,选择从CEditView类派生应用程序的视图类CExam4_1View,就能生成文本编辑器的基本框架。

根据对文本编辑器的要求,还须在“编辑”菜单下增加“全选”、“查找”、“查找下一个”、和“替换”4个菜单项。

实现后的应用程序运行窗口如图4-11所示。

图4-11实现的文本编辑器

实现步骤:

1用AppWizard生成应用程序的基本框架

(3)在VC集成开发平台,单击File菜单中的New菜单项,打开New对话框。

(4)在New对话框中,选择Project标签,单击MFCApplication(EXE)。

(5)在右边填写工程名称:

Exam4_1,并确定工程文件保存位置。

(6)单击“OK”按钮,在MFCAppWizard-Step1of6对话框中,选择应用程序的类型为SingleDocument。

(7)连续单击5个“Next”按钮,接受向导默认设置,进入到MFCAppWizard-step6of6对话框中,在类的列表中选中CExam4_1View,在Baseclass下拉框中选择CEditView。

(8)单击“Finish”按钮,显示NewProjectInformation对话框,单击“OK”按钮,回到集成开发平台。

(9)选择Build菜单中的ExecuteExam4_1.exe菜单项,运行该应用程序。

2增加文本编辑器的菜单项

(4)展开ResourceView标签中的Menu菜单资源,双击IDR_MAINFRAME,打开菜单编辑窗口。

(5)在“编辑”菜单项底部依次加入“全选”、“查找”、“查找下一个”和“替换”菜单项,各菜单项的属性如表4-2所示。

(6)在“全选”菜单项后,应插入一个分隔线,分隔线是一个特殊的菜单项,只要在属性窗口中选取Separator复选框即可,不用输入ID和Caption内容。

表4-2菜单属性设置

菜单ID

菜单名(Caption)

ID_EDIT_SELECT_ALL

全选(&A)\tCtrl+A

ID_EDIT_FIND

查找(&F)\tCtrl+F

ID_EDIT_REPEAT

查找下一个(&N)\tF3

ID_EDIT_REPLACE

替换(&R)\tCtrl+H

(15)最终在菜单编辑器完成的“编辑”菜单如图4-11所示,保存后重新运行程序。

说明:

3一个菜单项与一个菜单ID相对应,经消息映射后与一条菜单消息相对应,选择一个菜单项系统将自动调用相应的菜单消息处理函数

4一个菜单若具有下级菜单,不对应菜单ID

5在此程序中,因加入的菜单命令是标准的MFC菜单命令ID标识符,即CEditView类中定义的消息映射能自动将每个命令消息发送到相应的消息处理函数,所以不用再定义消息处理函数

6添加菜单命令的加速键(Accelerator)

(1)展开ResourceView标

(2)签中的Accelerator加速键资源,(3)双击IDR_MAINFRAME,(4)打开加速键编辑窗口。

(5)双击加速键清单底部的空框,(6)打开AccelProperties对话框。

(7)在ID栏输入:

IDR_EDIT_SELECT_ALL,(8)在“Key”编辑框中输入A,(9)右边单选钮保留默认值,(10)关闭对话框。

同(11)样的方法定义“查找”和“替换”的加速键。

(12)完成“查找下一个”的加速键F3的定义方法有所不同(13):

先输入ID,(14)再选择右边“ASCII”单选钮,(15)单击“NextKeyTyped”按钮,(16)再按键盘上的“F3”键。

(17)保存后重新运行程序,(18)使用加速键来执行菜单命令。

7修改文本编辑器的默认文件扩展名为(.txt)

在字符串编辑器中修改文本编辑器的默认文件扩展名。

(4)展开ResourceView标签中的StringTab字符串资源,双击IDR_MAINFRAME,打开字符串编辑窗口如图4-12所示。

图4-12字符串编辑器窗口

字符串编辑器窗口中列出的第一个字符串表识符为IDR_MAINFRAME,这个字符串是AppWizard生成的,由7个子串组成(\n为子串的分隔符),包含Exam4_1程序的特定消息。

其当前值为:

Exam4_1\n\nExam4_\n\n\nExam41.Document\nExam4_Document

双击该行中的任意位置,打开StringProperties对话框,如图4-13所示。

在Caption文本框中修改字符串,分别修改第四、第五子串,结果如下:

Exam4_1\n\nExam4_\nExam4_1文件(*.txt)\n.txt\nExam41.Document\nExam4_Document

图4-13字符串属性对话框

第四子串的内容“Exam4_1文件(*.txt)”是“打开”或“保存为”对话框显示在“文件类型:

”或“保存类型:

”列表框中的程序默认文件扩展名;第五子串的内容“.txt”是程序默认文件扩展名本身。

(5)保存后重新运行程序。

7修改文本编辑器的程序图标

(6)展开ResourceView标签中的Icon位图资源,双击IDR_MAINFRAME,打开图形编辑窗口,显示当前程序图标。

(7)运用画图工具栏对Icon进行修改。

图标数据以二进制的形式存放在Exam4_1.ico文件中。

(8)保存后重新运行程序。

4.2菜单的使用

4.2.1菜单的类型

菜单是由MFC菜单类(CMenu)来创建的,CMenu是从CObject类派生的,它在MFC类库中的层次位置如图4-14所示。

 

图4-14CMenu类

在一个窗口应用程序中,菜单的组成分成两大类:

顶层菜单和弹出菜单。

顶层菜单是指出现在应用程序的主窗口或最上层窗口的菜单;弹出菜单通常是指选择顶层菜单或一个菜单时弹出的子菜单。

1.顶层菜单(top-levelmenu)

一个顶层菜单由菜单名和菜单项构成。

菜单名指出一组菜单项命令的主要功能和目标。

常见的顶层菜单有:

“File”、“Edit”、“Windows”、“Help”等。

一个菜单项是可选择或可执行的,对应一个确定的功能。

2.弹出菜单(pop-upmenu)

本节将介绍三种弹出菜单:

下拉菜单、子菜单和快捷菜单,如表4-3所示。

表4-3弹出菜单的类型

菜单类型

介绍

下拉菜单(Drop-downmenus)

当一个顶层菜单列表中的菜单项被选中,会显示下拉菜单

子菜单(Submenus)

当一个菜单项被选择时,有继续选择菜单的要求,子菜单会显示。

菜单项右边的三角符号就表示有子菜单的存在。

快捷菜单(Shortcutmenus)

当右击鼠标键的时候,弹出一个包含相关命令的快捷菜单。

快捷菜单出现在鼠标箭头的位置。

在通常情况下,使用AppWizard生成一个应用程序框架时,定义了一个默认的菜单资源“IDR_MAINFRAME”,创建窗口时加载该资源。

该菜单资源包括标准菜单,例如,在“File”菜单中的“New”和“Open”。

要增加更多的菜单需要经过下面两步:

(1)使用菜单编辑器创建菜单;

(2)使用ClassWizard创建菜单命令消息处理函数,(3)编写代码支持菜单所要实现的功能。

4.2.2添加并设置菜单项

菜单编辑器的主要操作包括:

1.插入新菜单项

在当前空白菜单框位置插入,选定窗口中的空白菜单框后按回车(或双击空白菜单框),系统弹出MenuItemProperties对话框。

例如在应用程序Exam4_1的“查看”菜单插入一个新的菜单项“版本”,如图4-15所示编辑对话框。

图4-15菜单编辑器和属性对话框

在某菜单项前插入,选择该菜单按“Ins”键,菜单编辑器将在该菜单前插入一个空白菜单项,然后双击该空白菜单项进行编辑。

(1)插入一条分割线

要插入一个分割线,分割线实际也是一个菜单项,只要在对话框中选择Seperator属性即可。

(2)增加子菜单

要为一个菜单增加子菜单,只要在对话框中选择Pop-up属性即可。

(3)调整菜单项位置

选中某菜单项将其拖至适当位置即可。

(4)属性对话框的设置

在ID文本框中,输入菜单选项的资源符号,可从键盘输入,也可选取系统已定义的ID号。

例如:

“ID_VIEW_VERSION”是用户自定义输入的,例4-1中的“ID_EDIT_FIND”是系统已定义的ID号。

在Caption文本框中,输入菜单选项名。

如:

“版本(&V)\tCtrl+F12”,其中,“(&V)”是给菜单定义的热键为V字母,在热键字母前需加符号&;“\tCtrl+F12”说明菜单的加速键为“Ctrl+F12”,转移字符“\t”为使加速键都按右对齐显示。

在Prompt文本框中,输入描述性的文字,是为菜单定义在状态栏显示的提示。

这样,只要选中该项,系统将在状态栏提示相应的描述性的文字。

在文本串的最后可以加上工具按钮的提示文本,即“\n”后的文本,如上图中的“Version”是对应工具按钮下方的提示。

2.删除菜单项

用鼠标单击该菜单项或用上下左右光标键选择,然后按“Del”键删除。

4.2.3菜单命令处理

当添加了一个用户自定义的菜单项,并设置完菜单项属性后,若立即执行应用程序,可以看到该菜单项呈灰色,不可选择,必须为该菜单项增加菜单命令消息处理函数和相应支持代码。

菜单命令消息处理函数就是用户选择一个特定菜单项而产生的菜单消息映射函数。

MFC使用ClassWizard管理一个菜单命令消息处理函数,如图4-16所示,例如创建上节菜单命令“版本”的菜单命令消息处理函数的步骤如下:

(3)打开ClassWizard,在Classname下拉列表中选择增加的菜单命令消息处理函数所属的类,本例选择CMainFrame。

(4)在ObjectIDs列表中选择菜单项ID:

ID_VIEW_VERSION。

(5)在Messages列表中选择COMMAND。

(6)单击“AddFunction”,弹出函数名称确认对话框,接受默认函数名,单击“OK”按钮。

(7)单击“EditCode”,增加代码如程序清单4-1所示,实现版本信息显示。

(8)重新编译运行程序,执行菜单命令“版本”。

程序清单4-1:

菜单命令消息处理函数显示版本信息

voidCMainFrame:

:

OnViewVersion()

{

//TODO:

Addyourcommandhandlercodehere

MessageBox("Exam4_1ofVersion1.0!

");

}

图4-16增加命令处理函数

菜单命令消息映射函数增加在哪一个类中,主要取决于哪一个类与函数所执行的功能相关。

例如,一个菜单命令如果要输出一个图像,菜单命令消息映射函数应增加在视图类,因为视图类能方便地访问CDC对象实现图像输出。

4.2.4更新菜单的显示

设计菜单显示,应该考虑到用户在选择有些菜单命令时,希望看到选择留下的痕迹,例如,在“我的电脑”文件夹窗口中,通过菜单命令“查看”可以选择文件和文件夹显示的方式,用户作选择后,相应的菜单项的左边会出现一个圆点。

MFC通过消息映射机制和CCmdUI类实现更新菜单的显示。

当用户点击菜单时,窗口操作系统发送WM_INITMENU或WM_INITMENUPOPUP消息到窗口框架,窗口框架调用与该菜单命令相关联的菜单命令更新处理函数,菜单项的更新就产生了。

CCmdUI类提供了支持更新菜单显示的功能函数,例如CCmdUI:

:

Enable()函数可以设置菜单项是否有效,当参数值为false时,菜单项无效,呈灰色显示;当参数值为true时,菜单项有效,可以被执行。

CCmdUI提供的更新菜单显示的成员函数如表4-4所示。

表4-4CCmdUI的成员函数

成员函数

描述

Enable

设置菜单项是否有效

SetCheck

增加或清除‘√’标记

SetRadio

增加或清除圆点标记

SetText

改变菜单显示文本

应用程序如果需要在运行过程中更新菜单项的显示,就要为该菜单项映射菜单命令更新处理函数,增加代码,实现更新。

下面通过一个例子来熟悉菜单更新操作。

【例4-2】在应用程序Exam4_1的“查看”菜单中增加菜单项“大”,该菜单项为切换菜单,要求增加切换标记,并且使菜单项名称随选择次数逢3在“大”“中”“小”三个菜单名称之间循环变换。

具体实现步骤如下:

(3)打开菜单编辑器,在“查看”菜单中增加菜单项ID为ID_VIEW_BIG,Caption为“大”。

(4)为CMainFrame类增加Public访问权限的int型成员变量count,并在该类的构造函数中设置初值为0。

(5)打开ClassWizard,Classname列表中选择CMainFrame,ObjectIDs列表中选择ID_VIEW_BIG,Messages列表中分别选中COMMAND和UPDATE_COMMAND_UI消息,单击“AddFunction”按钮,增加命令处理函数和菜单更新处理函数。

(6)单击“EditCode”按钮,为新增的函数添加代码,代码参考程序清单4-2。

(7)运行程序,连续选择菜单项ID_VIEW_BIG,观察菜单项的改变。

程序清单4-2:

更新菜单显示

voidCMainFrame:

:

OnUpdateViewBig(CCmdUI*pCmdUI)

{

//TODO:

AddyourcommandupdateUIhandlercodehere

if(count%2)

pCmdUI->SetCheck(true);

else

pCmdUI->SetCheck(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1