VB与API学习笔记(3)资源文件

嗯,这个我一直在关注,终于有机会学一下了。

感观看一下:


上面是创建资源文件,添加资源的过程。

一、资源文件:就是一个仓库,它可以存储字串、图标、图片等资源,这些在程序运行时方便调用。


二、类型:资源文件有: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 '若有其它正在播放中,则不终止该播放,而返回FAlse
Const 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_ASYNC
End 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 Long

Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_LOOP = &H8
Const SND_NOSTOP = &H10
Const SND_MEMORY = &H4

Private 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






      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值