2017-02-10 63 views
-1

我有一個.ico文件在內存中的內容爲const char*,我希望從這些數據創建一個HICON。我目前的做法是將數據寫入臨時文件,然後使用​​。是否有可能直接從內存中創建圖標?從窗口的內存創建HICON

+0

是的。解析文件並創建圖標。 –

+0

@DavidHeffernan我試圖避免創建一個文件。我將內存中的圖標內容視爲字符數組,並希望直接從該數據創建HICON。 –

+1

查看'CreateIconFromResource'。 –

回答

1

如果你想這樣做,不使用GDI +也WIC那麼你必須做一些分析自己,因爲一個.ico文件的格式不完全一樣的.EXE/.DLL一個圖標資源,所以你不能使用基於資源的圖標功能。正式的二進制規範可以找到here,並且有關於它的一個很棒的博客系列here

如果您的.ico文件中有多個圖片,則必須循環顯示圖標目錄,直到找到您滿意的圖片尺寸。然後您可以致電CreateIcon創建一個HICON

0

隨着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) 

希望它能幫助你。