嗯,这个我一直在关注,终于有机会学一下了。
感观看一下:
上面是创建资源文件,添加资源的过程。
一、资源文件:就是一个仓库,它可以存储字串、图标、图片等资源,这些在程序运行时方便调用。
二、类型:资源文件有:String,Bitmap,Curson,icon,Wave等关键字。
通过上面可以添加对应的类型,还有一个自定义类型(如文件)
特殊的字符是用 \x?? 来书写,和C++写一样,表示 一个十六进制的东西。
比如,\x0d 就是chr(13) \x0a 就是chr(10),在字串中不能用chr就是只能用这个方式。
三、保存后的资源文件,加载到程序中,如何调用这些资源呢?
已经存在的资源文件如何加载到程序中?(在工程资源管理器中右击,添加,选择资源文件即可)
两个唯一:1、一个程序不能有两个名相同的资源文件,资源名唯一
2、同一资源文件,同类型资源编号不能有两个一样,编号唯一
调用方法:
1、载入文字:LoadResstring
S=LoadResstring(8001) '载入编号为8001中的文字,并指定给S
2、载入图片:LoadResPicture
Set Image1.Picture=LoadResPicture("wanglogo",vbResBitmap) '载入名为wanglogo图片,并设置给image1
Set Me.Icon=LoadResPicture("earth",vbResIcon) '载入图标earth到窗体
Set Me.MouseIcon=LoadResPicture("bigpoint",vbResCursor) ‘载入名为bigpoint鼠标指针,并指定给窗体
3、载入声音:LoadResData (相当于二进制数据)
即:Byte数组变量 =LoadResData(声音资源名,"WAVE") '注意,这里必须加引号
dim b() as byte
b=LoadResData("Tada","WAVE")
四、播放声音
sndplaySound
Option Explicit'播放声音 返回值:0失败,非0成功Private Declare Function sndplaySound _ lib "winmm.dll" _ Alias "sndplaySoundA" (ByVal lpszSoundname As String,ByVal uFlags As Long) As Long'lpszSoundname .wav文件路径,或存储声音地址。为vbNullString时停止当前正在播放的声音'uFlags标志,有如下设置:Const SND_SYNC = &H0 '同步调用,声音播放完毕后,才继续向下执行。Const SND_ASYNC = &H1 '非同步,无须播放完毕就继续向下执行Const SND_LOOP = &H8 '循环,只能与SND_ASYNC组合(不然程序怎么向下执行呢:)Const SND_NOStop = &H10 '若有其它正在播放中,则不终止该播放,而返回FAlseConst SND_MEMORY = &H4 '播放存储器中的声音Private Sub Command1_Click() Dim wavfile As String wavfile = App.Path & "\wo.wav" Text1.Text = "下面同步" sndplaySound wavfile,SND_SYNC '同步,这个放完后,才执行下面 Text1.Text = "下面异步" sndplaySound wavfile,SND_ASYNC '异步,播放同时向下执行 Text1.Text = "下面异步非中断" sndplaySound wavfile,SND_ASYNC Or SND_NOStop '异步,前面没播完,不会中断前面 Text1.Text = "下面异步循环" sndplaySound wavfile,SND_ASYNC Or SND_LOOP '异步循环 Text1.Text = "停止播放" sndplaySound vbNullString,0 '停止播放 Text1.Text = "播放系统退出时声音" sndplaySound "SystemExit",SND_ASYNCEnd Sub
如何对资源管理器的声音播放。
1、提取声音,转存在二进制数组中。
2、由于数组是传址方式,而API是传值,须更改API为传址
3、其标志应指定来自内存(变量)
Option Explicit'更改别名,及传址方式Private Declare Function sndplaySoundFromMemory _ lib "winmm.dll" _ Alias "sndplaySoundA" (lpszSoundname As Any,ByVal uFlags As Long) As LongConst SND_SYNC = &H0Const SND_ASYNC = &H1Const SND_LOOP = &H8Const SND_NOStop = &H10Const SND_MEMORY = &H4Private Sub Command1_Click() Dim b() As Byte,i As Integer b = LoadResData("WO","WAVE") sndplaySoundFromMemory b(0),SND_MEMORY '特别注意,为了检查效果,最好用同步。异步也不会错,但听不到声音。原因,因为马上执行退出过程,声音就中断了,听不见:( '吐血检查了近20分钟,原来是这个原因。如果下面加一个循环语句,就可以听到异步声音了End Sub
其实,提取资源文件是根据代号来提取的,只是我们用WO,及WAVE来标明,以便分明辨别
如上,声音文件101也是,那么就可以改为: b=loadResData(101,"CUSTOM")
五、国际化
程序中的“文字说明”可能用其它语言,怎么快速变换呢?
用资源文件。
设想: 里面设置两种语言,一中一英,英文时载入英文字串,中文时载入中文字串。
Private Sub Command1_Click() Dim b() As Byte,s As String b = LoadResstring(101) s = StrConv(b,vbUnicode) '转为unicode码End Sub总结
以上是内存溢出为你收集整理的VB与API学习笔记(3)资源文件全部内容,希望文章能够帮你解决VB与API学习笔记(3)资源文件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)