怎样使程序中的API函数LoadImage在VB6集成开发环境下调试运行时也能从资源(.res)文件内加载图标呢?

大家知道,VB的内部函数LoadResPicture总是返回32x32的图标,而有时候我们需要48x48或16x16的图标资源,这时如果我们还用LoadResPictur... 大家知道,VB的内部函数LoadResPicture总是返回32x32的图标,而有时候我们需要48x48或16x16的图标资源,这时如果我们还用LoadResPicture来载入的话是必要对图标进行缩放,这就会造成不必要的图像锯齿和失真。既然我们添加到资源文件中的图标都包含有几套标准尺寸的图标,那么我们完全可以利用API函数LoadImage来加载它们,因为该函数支持以不同标准尺寸来装载图标,从而也就避免了二次缩放图标引起的失真。

但是现在我遇到个问题想请教大家。就是LoadImage函数只能加载已编译程序(.exe)资源中的图标,如果是在VB6集成开发环境下调试运行的话,LoadImage函数会从VB6.EXE中加载资源,这样就会出错找不到我自己的资源。请问,有没有什么方法能够使LoadImage函数在IDE环境下也能从我的工程中的资源(.res)文件内加载图标资源呢?
我在VBGOOD上找到了一种实现方法,具体如以下代码所示:
'从资源中加载图标数据 (ResID,ResType) 到内存 并返回其中规定尺寸 ICONSIZE 的图标句柄
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
LoadResIcon = CreateIconFromResourceEx(mIcon(IDETY.dwImageOffset), IDETY.dwBytesInRes, -1, &H30000, iSize, iSize, 0)
End Function
可是我在VB6下调试发现一个问题,就是执行到“CopyMemory IDETY, ByVal pData + 6 + (i - 1) * iLen, iLen”时就不往下执行了,我觉得是计算内存地址有问题,但又不知道怎样修改,麻烦帮修改下吧
展开
 我来答
tianqing20wen

2011-03-18 · TA获得超过2.4万个赞
知道大有可为答主
回答量:8226
采纳率:88%
帮助的人:5081万
展开全部
Private Declare Function LoadImage1 Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As Long, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
Private Function IsIDE() As Boolean
On Error GoTo Err
Debug.Print 1 \ 0
Exit Function
Err:
IsIDE = True
End Function
Private Sub Form_Load()
If IsIDE Then
hIcon = LoadImage(App.hInstance, "z:\48.ico", 1, 0&, 0&, &H10)
Else
hIcon = LoadImage1(App.hInstance, 101, 1, 0&, 0&, &H0)
End If
MsgBox hIcon
End Sub

或者你自己写个解析res资源文件格式(win32 resource file format ) 从中提取图标 这也应该是Loadrespicture做的事
百度网友c78508f
2011-03-17 · TA获得超过112个赞
知道小有建树答主
回答量:200
采纳率:0%
帮助的人:166万
展开全部
按 Ctrl +D 把你的那个 RES 加进去 ,然后编译就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式