从Windows上的内存创建HICON

时间:2017-02-10 19:18:48

标签: c winapi

我将.ico文件的内容作为const char*存储在内存中,我希望根据此数据创建HICON。我目前的方法是将数据写入临时文件,然后使用LoadImage。是否可以直接从内存中创建图标?

2 个答案:

答案 0 :(得分:2)

如果你想在不使用GDI +和WIC的情况下这样做,那么你必须自己做一些解析,因为.ICO文件的格式与.EXE / .DLL中的图标资源不完全相同所以你不能使用基于资源的图标功能。可以找到官方二进制规范here,并且有一个很棒的博客系列here

如果.ico文件中包含多个图像,则必须遍历图标目录,直到找到您满意的图像尺寸。然后,您可以致电CreateIcon创建HICON

答案 1 :(得分:1)

使用CreateIcon,您当然可以创建图标,但我不确定您是否可以使用png格式的图像数据来提供图标。

我在CreateIconFromResourceEx取得了成功(抱歉使用其他语言,但以此为例,您可以直接在C中使用该功能):

from ctypes import *
from ctypes.wintypes import *
CreateIconFromResourceEx = windll.user32.CreateIconFromResourceEx

size_x,size_y = 32,32     LR_DEFAULTCOLOR = 0

with open("my32x32.png", "rb") as f:
    png = f.read()
hicon = CreateIconFromResourceEx(png, len(png), 1, 0x30000, size_x, size_y, LR_DEFAULTCOLOR)

希望它对你有所帮助。