'CreateIconFromResource 函数通过ICON图像资源位描述信息创建一个图标或光标,presbits:图像资源起始点指针,dwResSize:图像数据尺寸,fIcon:TRUE为图标、FALSE将创建一个光标,dwVer:指定创建的图标的版本号(Windows 2.x =&H20000、Windows 3.x =&H30000 ,在WIN32程序中使用的都是Windows 3.x格式)。失败返回NULL,成功则返回创建的图标的句柄(handle )。
Declare Function CreateIconFromResource Lib "user32" (presbits As Byte, ByVal dwResSize As Long, ByVal fIcon As Long, ByVal dwVer As Long) As Long
'GetIconInfo 函数取得与图标有关的信息。返回非零表示成功,零表示失败。函数返回时,由ICONINFO结构载入的位图必须由应用程序删去。hIcon 为由CreateIconFromResource 函数创建的图标的句柄即:CreateIconFromResource 函数的返回值。
Declare Function GetIconInfo Lib "user32" (ByVal hIcon As Long, piconinfo As ICONINFO) As Long
' CreateIconIndirect 函数通过GetIconInfo函数取得的ICONINFO(图标信息)创建一个图标,执行成功返回图标的句柄,零表示失败。
Declare Function CreateIconIndirect Lib "user32" (piconinfo As ICONINFO) As Long
'DrawIcon 函数在指定设备的指定位置画一个图标。返回非零表示成功,零表示失败。hdc:设备关联句柄,x/y:绘制图像的起点位置,hIcon:图标的句柄。
Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal hIcon As Long) As Long
'DestroyIcon 函数清除创建的图标以释放其占用的内存。返回非零表示成功,零表示失败。hIcon:图标的句柄。
Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long
通过上面的函数说明可见,我们可以单单使用图像信息来创建一个图标,即上面的iconimage结构。下面是以32×32象素,16色单资源图标文件为例的例子:
Dim tmphIcon As Long
Dim IconShow() As Byte
Private Sub Command4_Click()
Dim lTemp As Long
Dim lSize As Long
Dim freefn As Integer
ReDim IconShow(743) '等同于前面第3节中定义的iconimage结构。
freefn = FreeFile
Open App.Path + "\11.ico" For Binary As #freefn
Seek #freefn, 23
Get #freefn, , IconShow
Close #freefn
'---------------------------直接加载图标。
lTemp = DestroyIcon(tmphIcon)
Picture3.Cls
lSize = 744
lTemp = CreateIconFromResource(IconShow(0), lSize, 1, &H30000)
DrawIcon Picture3.hdc, 0, 0, lTemp
Picture3.Refresh
tmphIcon = lTemp
End Sub
以上代码只是取到抛砖引玉的作用,并不表明任何其他意图。同样,使用CreateIconIndirect 函数创建的图标也可以直接用DrawIcon 函数函数显示。