VB中资源文件的使用方法.docx
《VB中资源文件的使用方法.docx》由会员分享,可在线阅读,更多相关《VB中资源文件的使用方法.docx(12页珍藏版)》请在冰豆网上搜索。
VB中资源文件的使用方法
VB中资源文件的使用方法
在几乎所有的Windows应用程序中都拥有资源文件,这些文件定义使用应用程序将要显示很多的用户界面元素,以及提供程序所需要的各种类型数据的存储场所。
资源文件在VC应用程序中应用十分广泛,在VB应用中却很少提及它。
其实在开发VB应用程序时,一样可以将要用到的字符串、位图、图标和其它类型的数据等做成一个资源文件。
因为这样做至少有以下几个优点:
(1)提高性能减少内存空间的占用,这是因为字符串、位图、图标和数据可以不必在程序启动或调用窗体时就全部加载,而是根据需要随时从资源文件中加载。
(2)将所需要的资源文件中单独存放在一个资源文件中,使用移植程序和更改一些界面显示变得十分简单,不必访问程序的源代码。
下面就和大家具体谈谈如何在VB中建立和使用资源文件。
首先,我们先了解一下windows应用程序中一般经常使用的资源:
位图:
位图是用于创建应用程序用户界面的图像。
例如,用户可以为工具栏按钮创建一套位图,也可以创建在其它窗口上显示的位图。
一般来说,都是在图像编辑器中创建位图,然后再将该位图添加到资源文件中。
图标:
图标是类似于位图的小图像,然而,虽然位图可以具有任意大小的尺寸,但是图标却小得多,通常为16*16像素或32*32像素。
图标使用的很多方法与位图一样。
然而,图标通常被用作代表最小化应用程序的图象、代表应用程序文档类型的图像和其它类型的应用系统。
字符串表:
就是指文本串的一个表格,通常来说字符串用来显示菜单命令的提示、对话框中和消息框中显示的信息。
要访问串表格中的文本串,需引用串的ID,它与定义表格的源文件中的串相联系。
光标:
光标是代表鼠标在屏幕上的位置的图像。
尽管windows系统定义和许多类型的光标,但用户也可以创建自己需要的光标。
定制资源:
定制资源是用户想存储在其应用程序资源文件中的任何类型的数据。
这些数据可以是文本文件或二进制文件,用户可以用任何喜欢的方式定制资源。
资源文件只是作为存储区域。
创建了定制资源,可以避免必须从磁盘文件中加载数据,因为数据随资源文件一起加载。
对话框:
对话框的资源定义包括样式标志(控制对话框外观及行为的值)以及对话框中含控件的大小和位置。
菜单栏:
用户应用程序的菜单栏也可以在资源文件中定义。
可以在资源文件中指定命令和命令的ID,以用命令在菜单中的位置。
加速器:
加速器也称为热键。
它们是用户快速选取命令时所按下的键,使用热键时,不必在应用程序的菜单中寻找命令。
加速器在一个表格中定义,这个表将按键与命令资源的ID联系起来。
那么在VB开发环境中如何使用这些资源呢?
1、添加资源文件编辑器,
启动VB6.0的IDE集成环境,新建一个工种。
点选菜单“外接程序”下的“外接程序管理器”,在弹出的对话框的列表框中选择“VB6资源编辑器”,选择加载并单击“确定“后退出对话框。
这样在“工具”菜单栏中就有一项“vb资源编程器”了。
打开这个工具就可以进行资源文件的编辑了。
2、编辑资源文件
在资源编辑器中编辑资源文件非常简单。
它可是编辑我们在上面先提到的位图、图标、光标、字符串及定制资源五种类型的资源,如图1所示:
在进行编辑时,点击相应的图标就可以添加资源了。
编辑资源的方法也很容易,以添加图片为例看一看添加位图的方法:
点击添加位图按钮,在弹出的对话框中选择一个位图文件,单击“OK”后,位图的添加就完成了,在这里要注意属性按钮,点击它以后,可以选择请语言版本并输入资源的ID号,这个ID号是标识一类资源的唯一编号,必须记住资源的ID号,以使在应用程序中调用。
编辑好资源后,关闭资源编辑器,资文件自动加入新建的工种内。
另外,也必须将资源文件保存。
其它资源的编辑方法也大体上一样。
3、使用资源文件,在应用程序中调用资源文件与直接使用资源基本上是一致的。
对了,在一个工种中只能保存一个资源文件,在使用资源文件之前,请必须保证资源已经加入到资源文件中了。
调用资源文件中资源的函数有:
LoadResString返回一个文本字符串。
语法:
LoadResString(index)index必需是一个整数,它用来指定资源文件中数据的标识符(即经常提到的ID号),如果ID号为1的资源保留给应用程序图标。
LoadResPicture用以从资源(.res)文件装载位图、图标或光标。
它的语法:
LoadResPicture(index,format)
LoadResPicture函数的语法包含下列部分:
参数描述
index一个整数或字符串,它用来指定资源文件中数据的标识
符(ID)。
ID标识符为1的资源保留给应用程序的图标。
format必需的。
一个数值或常数,如下列“设值"中所描述的,
指定返回数据的格式。
用于format的设置值有:
常数值描述
vbResBitmap位数0位图资源
vbResIcon图标1图标资源
vbResCursor2光标资源
说明:
可以使用LoadResPicture函数代替对存储在Form或控件的Picture属性中的图形的引用。
LoadResData返回一个Byte数组,用以从资源(.res)文件装载若干可能类型的数据。
语法为:
LoadResData(index,format)
LoadResData函数的语法包含下列部分:
部分描述
index必需的。
一个整数或字符串,它用来指定资源文件中数据的标识
符(ID)。
ID标识为1的资源保留给应用程序的图标。
Format必需的。
一个数值,它用来按照下列“设置值"中的描述,指定返
回数据的原始格式。
该数值也可以是用户定义资源的字符串名。
设置值用于format的设置值有:
设置值描述
1光标资源
2位图资源
3图标资源
4菜单资源
5对话框
6字符串资源
7字体目录资源
8字体资源
9加速键表
10用户定义资源
12群组光标
14群组图标
说明:
LoadResData从资源文件装载的数据可以达到64K。
最后我们用一个简单的例子来说明这几个函数的用法:
(1)建立一个窗体,在窗体上放置三个按钮,一个图片框用来显示图片、图标。
其属性如图2所示。
按照前面讲述的方法添加资源文件编辑器并建立工程文件,里面包含一个字符串,位图、图标、光标和一个自定义的资源。
程序代码如下所示:
PrivateSubcmdLoadData_Click()
DimttAsByte
EndSub
PrivateSubcmdLoadPicture_Click()
picTest.Picture=LoadResPicture(101,1)
'如何为0表示位图,为2表示光标
EndSub
PrivateSubcmdLoadstring_Click()
DimstrAsString
str=LoadResString(101)
MsgBoxstr
EndSub
--------------------------------------------------------
下面详细说明资源文件的使用方法
LoadResData返回一个Byte数组,用以从资源(.res)文件装载若干可能类型的数据。
语法为:
LoadResData(index,format)
LoadResData函数的语法包含下列部分:
部分描述
index必需的。
一个整数或字符串,它用来指定资源文件中数据的标识
符(ID)。
ID标识为1的资源保留给应用程序的图标。
Format必需的。
一个数值,它用来按照下列“设置值"中的描述,指定返
回数据的原始格式。
该数值也可以是用户定义资源的字符串名。
设置值用于format的设置值有:
设置值描述
1光标资源
2位图资源
3图标资源
4菜单资源
5对话框
6字符串资源
7字体目录资源
8字体资源
9加速键表
10用户定义资源
12群组光标
14群组图标
VB中资源文件的使用技巧
一、开发中英(简、繁)双版本
现在比较流行的软件都会有中文版、英文版、繁体版等等多个版本,并可以根据系统的语言自动显示相适应的版本,那么这个功能在VB是如何实现得呢的:
1、首先通过API函数GetSystemDefaultLCID判断系统的语言
OptionExplicit
DimlangAsString
PrivateDeclareFunctionGetSystemDefaultLCIDLib"kernel32"()AsLong
PrivateSubForm_Load()
DimLocaleIDAsLong
LocaleID=GetSystemDefaultLCID
SelectCaseLocaleID
Case&H404
MsgBox"当前系统为:
中文繁体",,"语言"
Case&H804
MsgBox"当前系统为:
中文简体",,"语言"
lang="1"
Case&H409
MsgBox"当前系统为:
英文",,"语言"
lang="2"
EndSelect
EndSub
2、然后程序就可以加载保存在资源文件(这里我们就是使用的这种方法)、注册表、INI文件、文本文件或其他文件中的各类字符串,以达到达到实现多种语言的目的。
⑴启动VB6.0,在“外接程序→外接程序管理器”中加载“VisualBasic6资源编辑器”
⑵在VB资源编辑器窗口中,点击“编辑字符串表格”输入如下资料:
标识号中文(中国)
101例子
102中文
103英文
201Ensample
202Chinese
203English
⑶保存资源文件,写如下代码:
(自定义装载字符的函数LoadString)
SubLoadString()
Me.Caption=LoadResString(Int(lang&"01"))
Command1(0).Caption=LoadResString(Int(lang&"02"))
Command1
(1).Caption=LoadResString(Int(lang&"03"))
EndSub
⑷怎么样一个简单的中英双版本的程序就做出来了,如果把lang的值设置为1,则显示中文,如果把lang的值设置为2,则显示英文。
ps:
更简单实用的方法是:
把不同语言文字放在同一个标识号ID对应的不同字符串表格中即可。
VB会自动实现多种语言转换!
二、直接播放EXE文件中的声音文件
使用资源文件,可以直接在在EXE文件中播放声音文件(WAV文件),使程序显得更加专业。
⑴启动VB6.0,在“外接程序→外接程序管理器”中加载“VisualBasic6资源编辑器”
⑵在VB资源编辑器窗口中,点击“添加自定义资料”,增加任意的WAV文件,再双击刚刚创建的自定义资源,弹出”编辑属性”窗口,定义如下:
类型:
"WAVE"
标识号:
102
语言:
中文(中国)
⑶保存资源文件,写如下代码:
OptionExplicit
PrivateDeclareFunctionGetSystemDefaultLCIDLib"kernel32"()AsLong
PrivateDeclareFunctionsndPlaySoundFromMemoryLib"winmm.dll"Alias"sndPlaySoundA"(lpszSoundNameAsAny,ByValuFlagsAsLong)AsLong
PublicConstSND_ASYNC=&H1&
PublicConstSND_MEMORY=&H4&
PrivateSubCommand5_Click()注释:
播放WAV文件
DimbArr()AsByte
bArr=LoadResData(102,"WAVE")
sndPlaySoundFromMemorybArr(0),SND_ASYNCOrSND_MEMORY
EndSub
⑷按F5运行本程序,点击Command按钮,就可以听到你选定的WAV文件的声音了。
三、直接调用各类图标、光标图片
在一个程序中,我们可能需要调用多个图标、光标、图片文件,一般来说我们主要是使用ImageList控件,不过其时使用资源文件是最好的方法(可以少使用一个控件呀)。
⑴启动VB6.0,在“外接程序→外接程序管理器”中加载“VisualBasic6资源编辑器”
⑵在VB资源编辑器窗口中,点击“添加光标”,“添加图标”,“添加位图”,装载所需要的文件。
⑶程序代码如下:
Me.Icon=LoadResPicture(101,vbResIcon)注释:
加载图标
Picture1.Picture=LoadResPicture(101,vbResBitmap)注释:
加载位图
Command1.MouseIcon=LoadResPicture(101,vbResCursor)注释:
加载光标
---------------------------------
----一.资源在软件设计中的作用----在Windows中,一个资源代表一个Windows对象的数据块,每个可执行文件都包含一个资源表,其中列出了该文件中的资源。
应用程序中使用的资源通常可分为两大类:
二进制资源和字符串资源;字符串资源指在应用程序的用户界面中出现的所有文本,其中包括菜单、对话框以及提示、警告和错误提示信息;二进制资源包括:
图标、位图、光标文件、声音、图象及视频等以二进制格式存放的资源。
----应用程序中引入资源文件的最初动机是为使应用程序更容易国际化;把应用程序分成两个概念模块:
代码模块和数据模块,如下所示:
数据模块+代码模块=产品
用户接口部件+应用程序部件=本地化产品----数据模块包含所有用户界面的字符串资源而不包含代码,相反,代码模块只包含可运行于所有区域的应用程序代码。
因而在开发不同语言版本的应用程序时,本地化小组只须把精力花在资源文件上,这样做有以下优点:
----高效:
由于代码是相同的,因而在开发新的国际化应用程序只须创建新的资源文件,这样可以顺利地开发不同语言版本的应用程序;安全:
无论在内部或利用外部公司本地化程序,都可以不用修改代码,这样做可以减少化在国际版测试上的精力;更好的本地化:
由于所有的字符串资源都在一个文件中,因此可以提高本地化工作的效率并防止遗漏。
----要将应用程序使用的资源从应用程序中分离出来组成数据模块,可以用资源编译器将这些对象合并到一个资源文件里;利用资源文件组织资源,允许你很容易将大量的图形位图和图标文件直接包含在你的项目中,在对他们进行访问时单独加载,能改进加载时间,避免资源在调用窗口时全部加载而加快程序代码执行效率;除此外,还可以增加空间,这是因为字符串、位图、图标和数据可以不必在调用窗口或模块时就全部加载,而是按照需要从资源文件中加载。
----二.资源在资源定义文件的组织与定义----字符串资源和二进制资源的定义语法分别如下:
----1.字符串资源----在资源定义文件里,字符串资源是包含在一个字符串表中的,定义语法格式:
STRINGTABLE[load_option][mem_option]
begin
StringIDstring
.
.
.
end----参数说明---------load_option指出资源被装栽的方式:
preload(程序执行时立即装载);loadoncall(资源在被调用时装载,默认方式)。
---------mem_option指定资源被载入内存后是否可以移动和卸载。
有三个参数可选:
Fixed(指定资源存放在一个固定的内存区域中),Moveable(资源在系统有必要压缩内存时可以被移动),Discardable(资源在不再使用时被卸载);---------StringID指定一个整数作为识别资源的资源号;---------String字符串资源,它必须包含再两个双引号之内,而且长度不超过255个字节,一个字符串资源在资源定义文件里只能放在一行之中。
----资源编译器编译资源时,是按标签号来分类的,每16个字符串为一段,标签号高12位相同的将被划分为同一段,在装载资源文件时是以段来栽入和卸载的。
----资源定义例子:
#defineIDS_HELLO1
#defineIDS_GOODBYE2
STRINGTABLE
Begin
IDS_HELLO,“Hello”
IDS_GOODBYE,“goodbye”
End----2.二进制资源----二进制资源是不包含在资源定义文件里的。
资源定义文件只包含了一个指向包含该资源的文件的指针,这些指针在资源定义文件里被称为单行声明。
----定义语法:
nameIDkeyword[load_option][mem_option]filename----参数说明:
----------nameID指定一个名字或整数来标识该资源。
这个标识号在同类的资源里是唯一的,而在图标类资源中,标识号0是保留号,0号图标资源是应用程序图标。
因而,图标类资源的标识号只能从1开始;---------keyword二进制资源的类别,可以设为以下参数之一:
Bitmap(位图文件)、cursor(光标文件)、iocn(图标文件)、sound(声音文件)、video(视频文件);---------load_option该参数功能与字符串资源对应定义参数相同---------mem_option该参数功能与字符串资源对应定义参数相同---------fileName包含资源的文件名,文件名格式采用MS-DOS的文件名格式,而且必须是全路径文件名,可以用双引号括起来也可以不括起来。
----例:
12BitmapPicture“c:
\disk.map”----3.资源文件的编译----用资源文件编译器把资源定义文件编译成标准的Windows资源文件后,该资源文件就可以加载到应用项目中被应用程序调用,编译后的文件是标准的资源文件,可由Microsoftc++和其它大部分的Windows开发工具使用。
编译资源定义文件可以用资源编译器RC.EXE。
----格式:
RC/R[option]definition_filesource_file-------/R该参数指定资源文件仅被编译而不连接到可执行文件-------option此参数为/?
则列出资源编译器RC.EXE的命令行参数;为/foName则指定编译后扩展名为.RES的资源文件名;-------definitionfile指定被编译的资源定义文件----例:
RC/R/fotest.restest.rc