在VB应用程序中巧用DLL(2)
Public Const SRCCOPY = &HCC0020
'声音播放状态常量
Public Const SND_SYNC = &H0
Public Const SND_MEMORY = &H4
'调用位图资源子例程
Sub load_pic(picName As String)
Dim hDLL As Integer
Dim hdcMemory, hLoadedbitmap, hOldBitmap As Integer
Dim retVal As Integer
Dim bmpInfo As BITMAP
'安装动态链接库DEMO.DLL
hDLL = LoadLibrary(App.Path & "DEMO.DLL")
'根据资源名从动态链接库中加载相应的位图资源
hLoadedbitmap = LoadBitmap(hDLL, picName)
'获取位图信息
retVal = GetObj(hLoadedbitmap, Len(bmpInfo), bmpInfo)
'创建一个与图片框控件的设备描述表兼容的内存设备描述表
hdcMemory = CreateCompatibleDC(Form1.Picture1.hDC)
'将位图选入内存设备描述表
hOldBitmap = SelectObject(hdcMemory, hLoadedbitmap)
'将位图从内存设备描述表中拷入图片框控件的设备描述表中
retVal = BitBlt(Form1.Picture1.hDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, hdcMemory, 0, 0, SRCCOPY)
'将原始位图选入内存设备描述表
retVal = SelectObject(hdcMemory, hOldBitmap)
'删除加载的位图,释放其占用的所有系统资源
retVal = DeleteObject(hLoadedbitmap)
'删除内存设备描述表
retVal = DeleteDC(hdcMemory)
'释放动态链接库
FreeLibrary (hDLL)
End Sub
'调用声音资源子例程
Sub load_sound(wavName As String)
Dim hDLL As Integer
Dim hloadwave As Integer
Dim hwaveres As Integer
Dim hsound As Long
Dim hrelease As Integer
Dim resVal As Integer
hDLL = LoadLibrary(App.Path & "DEMO.DLL")
'在动态链接库中查找资源类型为WAVE,资源名为wavName的资源
hwaveres = FindResource(hDLL, wavName, "WAVE")
'将该资源装入内存
hloadwave = LoadResource(hDLL, hwaveres)
'锁定该资源
hsound = LockResource(hloadwave)
'以同步方式播放内存中的声音资源
resVal = sndPlaySound(hsound, SND_SYNC + SND_MEMORY)
'释放该资源占用的内存
hrelease = GlobalUnlock(hloadwave)
FreeLibrary (hDLL)
End Sub
※FORM1.FRM代码清单
Private Sub cmdBitmap_Click(Index As Integer)
Picture1.Picture = LoadPicture("") '清空图片框控件
Select Case Index
Case 0
load_pic ("B1")
Case 1
load_pic ("B2")
End Select
End Sub
Private Sub cmdSound_Click(Index As Integer)
Select Case Index
Case 0
load_sound ("S1")
Case 1
load_sound ("S2")
End Select
End Sub
本实例程序已在Windows 3.X环境下通过测试。程序中的某些参数设置与特定需求(如资源动态库的内容等)有关,读者在开发实际应用时应做相应的改动。
- 上一篇:如何用Line控件做出分隔线
- 下一篇:如何扩展VB标准控件的功能