假定在资源文件里定义了如下声音资源: bg WAVE bgm2.wav则可用函数LoadResData调用该资源,调用后可用API函数sndPlaySound播放此声音资源.代码如下: '先在声明部分声明: Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Private Const SND_MEMORY = &H4 Private Const SND_ASYNC = &H1 '调用模块 Private Sub Command1_Click() Dim bArr() as Byte '定义一个空的Byte数组 bArr=LoadResData("bg","WAVE") '加载名为"bg"的声音资源 sndPlaySound bArr(0),SND_MEMORY OR SND_ASYNC '播放声音资源 End Sub
to guochj624(伤感男孩): 我只能用VC打开.res文件才能看清里面的文件,用VB打开只是一整个模块,里面有什么都不清楚。 你说要在资源文件里定义了如下声音资源,我不知道在哪里定义,请你写得具体一点。谢谢!
播放资源文件文件中的声音VB 提供的方法使我们可以很容易地使用资源文件中的字符、图片等资源。我们可以用以 下方法播放资源文件中的 wav 声音: 首先,在你的资源文件的源文件 (RC) 文件加入下面一行: MySound WAVE c:\music\vanhalen.wav 然后将其编译为 RES 文件。最后使用下面的声明及代码: Private Declare Function PlaySound Lib _ "winmm.dll" Alias "PlaySoundA" ( _ ByVal lpszName As String, _ ByVal hModule As Long, _ ByVal dwFlags As Long) As Long Private Const SND_ASYNC& = &H1 Private Const SND_NODEFAULT& = &H2 Private Const SND_RESOURCE& = &H40004 Dim hInst As Long Dim sSoundName As String Dim lFlags As Long Dim lRet As Long Private Sub Command1_Click() hInst = App.hInstance sSoundName = "MySound" lFlags = SND_RESOURCE + SND_ASYNC + _ SND_NODEFAULT lRet = PlaySound(sSoundName, hInst, lFlags) End Sub
还有一种方法,这段代码是我用过的,经测试没有问题.例如你要播放的资源文件为这样的 类型: "WAVE" 标识号:101 那么用如下代码播放:'以下代码放在一个别Form里 Option Explicit Private Declare Function sndPlaySound Lib "winmm" Alias _ "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) _ As Long Private Const SND_SYNC = &H0 Private Const SND_NODEFAULT = &H2 Private Const SND_MEMORY = &H4 Private Sub PlayWaveRes(vntResourceID As Variant, Optional vntFlags) '---------------------------------------------------------- ' 注意: 如果使用SND_ASYNC,你必须将下面的 ' bytSound()数组放在模块级变量定义的地方 ' 或定义为静态变量,否则可能导致GPF '------------------------------------------------- Dim bytSound() As Byte bytSound = LoadResData(101, "WAVE") If IsMissing(vntFlags) Then vntFlags = SND_NODEFAULT Or SND_SYNC Or SND_MEMORY End If If (vntFlags And SND_MEMORY) = 0 Then vntFlags = vntFlags Or SND_MEMORY End If sndPlaySound bytSound(0), vntFlags End SubPrivate Sub Command1_Click() PlayWaveRes "101" End Sub
bg WAVE bgm2.wav则可用函数LoadResData调用该资源,调用后可用API函数sndPlaySound播放此声音资源.代码如下:
'先在声明部分声明:
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Private Const SND_MEMORY = &H4
Private Const SND_ASYNC = &H1 '调用模块
Private Sub Command1_Click()
Dim bArr() as Byte '定义一个空的Byte数组
bArr=LoadResData("bg","WAVE") '加载名为"bg"的声音资源
sndPlaySound bArr(0),SND_MEMORY OR SND_ASYNC '播放声音资源
End Sub
我只能用VC打开.res文件才能看清里面的文件,用VB打开只是一整个模块,里面有什么都不清楚。
你说要在资源文件里定义了如下声音资源,我不知道在哪里定义,请你写得具体一点。谢谢!
首先需要在外接程序管理器中加载资源编辑器 Resource Editor
然后在工程中加入你要查看或者编辑的.res资源文件
双击资源文件,即可编辑你的资源,类型有字符串、图片、图标、自定义资源VB为支持.res资源增加了三个函数:LoadResPicture()、LoadResString()和LoadResData()。
LoadResPicture()函数用于调入位图、图标和光标资源,其作用非常类似LoadPicture()函数,不过LoadPicture是从磁盘文件中读取图形。LoadResPicture的格式为:
LoadResPicture(资源ID号,资源类型)
资源类型可为vbResBitmap、vbResIcon、vbResCursor,分别对应着位图、图标和光标三种资源。得到的图形可以直接赋与Picture属性,或在使用PaintPicture方法时使用。
LoadResString()函数用于调入字符串资源。字符串资源对于开发多语种软件比较有用。其使用格式为:
LoadResString(资源ID号)
LoadResData()函数可以调入各种资源。使用格式为:
LoadResData(资源ID号,资源类型)资源类型分类1
光标
2
位图
3
图标
4
菜单
5
对话框
6
字符串
7
字体目录
8
字体
9
加速键
10
用户定义资源
12
设备无关光标
14
设备无关图标
不行啊,能不能说得具体一点。thanks!
下方法播放资源文件中的 wav 声音:
首先,在你的资源文件的源文件 (RC) 文件加入下面一行:
MySound WAVE c:\music\vanhalen.wav
然后将其编译为 RES 文件。最后使用下面的声明及代码:
Private Declare Function PlaySound Lib _ "winmm.dll" Alias "PlaySoundA" ( _
ByVal lpszName As String, _
ByVal hModule As Long, _
ByVal dwFlags As Long) As Long
Private Const SND_ASYNC& = &H1
Private Const SND_NODEFAULT& = &H2
Private Const SND_RESOURCE& = &H40004
Dim hInst As Long
Dim sSoundName As String
Dim lFlags As Long
Dim lRet As Long
Private Sub Command1_Click()
hInst = App.hInstance
sSoundName = "MySound"
lFlags = SND_RESOURCE + SND_ASYNC + _ SND_NODEFAULT
lRet = PlaySound(sSoundName, hInst, lFlags)
End Sub
类型: "WAVE"
标识号:101
那么用如下代码播放:'以下代码放在一个别Form里
Option Explicit
Private Declare Function sndPlaySound Lib "winmm" Alias _
"sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) _
As Long
Private Const SND_SYNC = &H0
Private Const SND_NODEFAULT = &H2
Private Const SND_MEMORY = &H4
Private Sub PlayWaveRes(vntResourceID As Variant, Optional vntFlags)
'----------------------------------------------------------
' 注意: 如果使用SND_ASYNC,你必须将下面的
' bytSound()数组放在模块级变量定义的地方
' 或定义为静态变量,否则可能导致GPF
'-------------------------------------------------
Dim bytSound() As Byte
bytSound = LoadResData(101, "WAVE")
If IsMissing(vntFlags) Then
vntFlags = SND_NODEFAULT Or SND_SYNC Or SND_MEMORY
End If
If (vntFlags And SND_MEMORY) = 0 Then
vntFlags = vntFlags Or SND_MEMORY
End If
sndPlaySound bytSound(0), vntFlags
End SubPrivate Sub Command1_Click()
PlayWaveRes "101"
End Sub