大家知道,VB的内部函数LoadResPicture总是返回32x32的图标,而有时候我们需要48x48或16x16的图标资源,这时如果我们还用LoadResPicture来载入的话是必要对图标进行缩放,这就会造成不必要的图像锯齿和失真。既然我们添加到资源文件中的图标都包含有几套标准尺寸的图标,那么我们完全可以利用API函数LoadImage来加载它们,因为该函数支持以不同标准尺寸来装载图标,从而也就避免了二次缩放图标引起的失真。
但是现在我遇到个问题想请教大家。就是LoadImage函数只能加载已编译程序(.exe)资源中的图标,如果是在VB6集成开发环境下调试运行的话,LoadImage函数会从VB6.EXE中加载资源,这样就会出错找不到我自己的资源。请问,有没有什么方法能够使LoadImage函数在IDE环境下也能从我的工程中的资源(.res)文件内加载图标资源呢?
但是现在我遇到个问题想请教大家。就是LoadImage函数只能加载已编译程序(.exe)资源中的图标,如果是在VB6集成开发环境下调试运行的话,LoadImage函数会从VB6.EXE中加载资源,这样就会出错找不到我自己的资源。请问,有没有什么方法能够使LoadImage函数在IDE环境下也能从我的工程中的资源(.res)文件内加载图标资源呢?
可如果将图标以自定义资源添加进去的话就必须用LoadResData装载,但该函数返回的是字节数组,怎样才能把它直接转换成StdPicture对象呢?总不能把图标的字节数据写到一个磁盘文件里再加载进来吧~~~
怎么读?
Public Function LoadResIcon(ByVal ResID As String, ByVal ResType As String, Optional ByVal iSize As Long = 16&) As Long
Dim IDETY As ICONDIRENTRY
Dim mIcon() As Byte
Dim i As Long, iLen As Long, pData As Long
iLen = LenB(IDETY)
mIcon = LoadResData(ResID, ResType)
pData = VarPtr(mIcon(0))
For i = 1 To mIcon(4) '第5个字节就是子图标的数目
CopyMemory IDETY, ByVal pData + 6 + (i - 1) * iLen, iLen '读 图标目录 结构数据
If IDETY.bWidth = iSize Then Exit For '寻找符合尺寸的子图标
Next i
LoadResIcon = CreateIconFromResourceEx(mIcon(IDETY.dwImageOffset), IDETY.dwBytesInRes, -1, &H30000, iSize, iSize, 0)
End Function可是我在VB6下运行调试时发现一个问题,就是程序执行到“CopyMemory IDETY, ByVal pData + 6 + (i - 1) * iLen, iLen”这一行时就不再往下执行了,我觉得是计算的内存地址有问题,但又不知道怎样修改,麻烦大家抽空儿帮我修改一下吧
bwidth As Byte ';byte // width, in pixels, of the image:图像宽度,以象素为单位。一个字节
bheight As Byte ';byte // height, in pixels, of the image:图像高度,以象素为单位。一个字节
bcolorcount As Byte ';byte // number of colors in image (0 if >=8bpp):图像中的颜色数(如果是>=8bpp的位图则为0)
breserved As Byte ';byte // reserved ( must be 0):保留字必须是0
wplanes As Integer ';word // color planes:为目标设备说明位面数,其值将总是被设为1
wbitcount As Integer ';word // bits per pixel:每象素所占位数。
dwbytesinres As Long ';dword // how many bytes in this resource?:这份资源所占字节数
dwimageoffset As Long ';dword // where in the file is this image?:图像数据(iconimage)起点偏移位置。
End Type ' icondirentry好了,现在终于解决问题了,这里我还找到一篇《VB6中使用32位图标(第二版)》的好文章,其中详细说明了ICONDIRENTRY和CreateIconFromResourceEx的运用 http://blog.csdn.net/modest/archive/2008/05/22/2468937.aspx