[ad_1]
アイコン リソースをメモリからロードする必要があるプログラムを作成していますが、この作業を実行できる直接的な Windows API はないようです。 アイコンファイルはネットワーク経由で送信され、プログラムはファイルのデータを受信し、このデータをプログラムバッファに保存します。このデータを使用してウィンドウのアイコンを設定したいと考えています。 コード構造は次のようになります。
C++
char* buffer;
recvicon_data_by_network(&buffer,...);
HICON icon=(HICON)how_to_load_icondata_from_memory(buffer,...);
SendMessage(my_hwnd,WM_SETICON,(WPARAM)ICON_SMALL,(LPARAM)icon);
MSDN で言及されているように、ICONIFO という構造があります。
C++
typedef struct _ICONINFO { BOOL fIcon; DWORD xHotspot; DWORD yHotspot; HBITMAP hbmMask; HBITMAP hbmColor; } ICONINFO;
そして、.ICOファイルの構造は少し複雑ですが、圧縮アルゴリズムについてはいろいろあるようです。 私はまだそれに対処するスキルを持っていません。
私が試したこと:
.ico 形式のファイル データを ICONINFO 構造体に変換する方法に関する記事もいくつかあります。
C++
//size:16×16 icon int cx = 16, cy = 16; int offset=LookupIconIdFromDirectoryEx((PBYTE)&buffer[0], TRUE, cx, cy, LR_DEFAULTCOLOR); unsigned short i=1, count = *((unsigned short*)&buffer[4]); while (i < count) { memcpy(((PBYTE)&buffer[6]) + (i * 0xe),((PBYTE)&buffer[6]) + (i * 0x10), 0xe); } HICON ico_fav = CreateIconFromResourceEx((PBYTE)&buffer[offset], 0, TRUE, 0x00030000,cx,cy, LR_DEFAULTCOLOR);
アイコン データをローカル ファイルに保存したくありません。私のプログラム構造は gdiplus::Image::FromStream(…) の方法をサポートしていません。 HICONハンドルが必要で、アイコンのデータのメモリがあります。
解決策 1
簡単な仕事ではないのではないかと心配しています。 あなたはこの記事を見ているかもしれません: アイコン | マイクロソフト ラーン[^].
[ad_2]
コメント