中国电子产品可靠性与环境试验研究所 黄茂生
---- 一. 资源在软件设计中的作用
---- 在Windows中,一个资源代表一个Windows对象的数据块,每个可执行文件都包含一个资源表,其中列出了该文件中的资源。应用程序中使用的资源通常可分为两大类:二进制资源和字符串资源;字符串资源指在应用程序的用户界面中出现的所有文本,其中包括菜单、对话框以及提示、警告和错误提示信息;二进制资源包括:图标、位图、光标文件、声音、图象及视频等以二进制格式存放的资源。
---- 应用程序中引入资源文件的最初动机是为使应用程序更容易国际化;把应用程序分成两个概念模块:代码模块和数据模块,如下所示:
数据模块+代码模块=产品
用户接口部件+应用程序部件=本地化产品
---- 数据模块包含所有用户界面的字符串资源而不包含代码,相反,代码模块只包含可运行于所有区域的应用程序代码。因而在开发不同语言版本的应用程序时,本地化小组只须把精力花在资源文件上,这样做有以下优点:
---- 高效:由于代码是相同的,因而在开发新的国际化应用程序只须创建新的资源文件,这样可以顺利地开发不同语言版本的应用程序;安全:无论在内部或利用外部公司本地化程序,都可以不用修改代码,这样做可以减少化在国际版测试上的精力;更好的本地化:由于所有的字符串资源都在一个文件中,因此可以提高本地化工作的效率并防止遗漏。
---- 要将应用程序使用的资源从应用程序中分离出来组成数据模块,可以用资源编译器将这些对象合并到一个资源文件里;利用资源文件组织资源,允许你很容易将大量的图形位图和图标文件直接包含在你的项目中,在对他们进行访问时单独加载,能改进加载时间,避免资源在调用窗口时全部加载而加快程序代码执行效率;除此外,还可以增加空间,这是因为字符串、位图、图标和数据可以不必在调用窗口或模块时就全部加载,而是按照需要从资源文件中加载。
---- 二. 资源在资源定义文件的组织与定义
---- 字符串资源和二进制资源的定义语法分别如下:
---- 1. 字符串资源
---- 在资源定义文件里,字符串资源是包含在一个字符串表中的,定义语法格式:
STRINGTABLE [load_option] [mem_option]
begin
String ID string
.
.
.
end
---- 参数说明
---- -----load_option 指出资源被装栽的方式:preload(程序执行时立即装载);load on call(资源在被调用时装载,默认方式)。
---- -----mem_option 指定资源被载入内存后是否可以移动和卸载。有三个参数可选:Fixed (指定资源存放在一个固定的内存区域中),Moveable(资源在系统有必要压缩内存时可以被移动),Discardable(资源在不再使用时被卸载);
---- -----StringID 指定一个整数作为识别资源的资源号;
---- -----String 字符串资源,它必须包含再两个双引号之内,而且长度不超过255个字节,一个字符串资源在资源定义文件里只能放在一行之中。
---- 资源编译器编译资源时,是按标签号来分类的,每16个字符串为一段,标签号高12位相同的将被划分为同一段,在装载资源文件时是以段来栽入和卸载的。
---- 资源定义例子:
# define IDS_HELLO 1
#define IDS_GOODBYE 2
STRINGTABLE
Begin
IDS_HELLO , “Hello”
IDS_GOODBYE, “goodbye”
End
---- 2.二进制资源
---- 二进制资源是不包含在资源定义文件里的。资源定义文件只包含了一个指向包含该资源的文件的指针,这些指针在资源定义文件里被称为单行声明。
---- 定义语法: nameID keyword [load_option] [mem_option] filename
---- 参数说明:
---- ------nameID 指定一个名字或整数来标识该资源。这个标识号在同类的资源里是唯一的,而在图标类资源中,标识号0是保留号,0号图标资源是应用程序图标。因而,图标类资源的标识号只能从1开始;
---- -----keyword 二进制资源的类别,可以设为以下参数之一:Bitmap (位图文件)、cursor(光标文件)、iocn(图标文件)、sound(声音文件)、video(视频文件);
---- -----load_option 该参数功能与字符串资源对应定义参数相同
---- -----mem_option 该参数功能与字符串资源对应定义参数相同
---- -----fileName 包含资源的文件名,文件名格式采用 MS-DOS的文件名格式,而且必须是全路径文件名,可以用双引号括起来也可以不括起来。
---- 例: 12 Bitmap Picture “c:\disk.map”
---- 3. 资源文件的编译
---- 用资源文件编译器把资源定义文件编译成标准的Windows资源文件后,该资源文件就可以加载到应用项目中被应用程序调用,编译后的文件是标准的资源文件,可由 Microsoft c++和其它大部分的Windows 开发工具使用。编译资源定义文件可以用资源编译器 RC.EXE。
---- 格式:RC/R [option] definition_file source_file
---- ---/R 该参数指定资源文件仅被编译而不连接到可执行文件
---- ---option 此参数为/?则列出资源编译器RC.EXE 的命令行参数;为/fo Name 则指定编译后扩展名为 .RES 的资源文件名;
---- ---definition file 指定被编译的资源定义文件
---- 例: RC /R /fo test.res test.rc
---- 三. 资源在VB5下的调用
---- 编译后的资源文件是标准的Windows 资源文件,可以为大多数的Windows 开发工具使用。在Visual Basic 5.0 下先向工程添加资源文件,然后用Loadresstring(),Loadrespicture(),Loadresdata()函数调用,
函数名 描述
Loadrestring()
从资源文件(.res)装载字符串并返回一个文本字符串;
Loadrespicture()
从资源文件(.res)装载并返回一个Picture
对象,例如图标、位图、或光标;
Loadresdata()
从资源文件(.res)装载并返回一个Byte
数组,用于象 .wav 之类的文件;
---- 调用语法:
---- Loadrestring(index),index是必须的一个参数,它用来指定资源文件中数据的标识号(ID),ID标识号为1的资源号保留给应用程序图标;
---- Loadrespicture(index,format),index含义与上同,Format是必须的一个数值常数,它用来指定返回数据的格式。其设置如下:
常数 设置 描述
VbResBitmap 0 位图资源
VbResIcon 1 图标资源
VbResCursor 2 光标资源
---- Loadresdata(index,format),其参数index含义和Loadrespicture()相同,其中用于Format的设置有:
设置 描述 设置 描述
1 光标资源 7 字体目录资源
2 位图资源 8 字体资源
3 图标资源 9 加速标资源
4 菜单资源 10 用户定义资源
5 对话框 12 群组光标
6 字符串资源 14 群组图标
---- 例:调用前面已定义的字符串资源和位图资源,把按钮bottom1的caption属性设为“Hello”,Form1的Picture属性设为disk.bmp
botton1.caption= Loadrestring(1)
Form1.picture= Loadrespicture(12,0)
……