TortoiseGitをインストールした際にエクスプローラーなどに表示されるアイコンを取得表示する。
アイコン情報を取得するには、
SHGetFileInfo
を使用します。
フラグに
SHGFI_OVERLAYINDEX
を追加するよ!
ハンドルを取得出来たら
DestroyIcon(shfi.hIcon)
でアイコンは開放しておく。
例)
アイコンのハンドルとインデックス番号を取得する関数
#include <shellapi.h>
#pragma comment(lib, "Shell32.lib")
HANDLE get_icon_handle(const TCHAR *entry, DWORD *d_no)
{
SHFILEINFO shfi;
HANDLE handle;
handle = (HIMAGELIST)::SHGetFileInfo(entry,
FILE_ATTRIBUTE_ARCHIVE,
&shfi,
sizeof( SHFILEINFO ),
SHGFI_SMALLICON
| SHGFI_SYSICONINDEX
| SHGFI_OVERLAYINDEX
| SHGFI_ICON);
if (handle)
{
*d_no = shfi.iIcon;
::DestroyIcon(shfi.hIcon);
}
return handle;
}
アイコンを表示するには、
ImageList_DrawEx
を使います。
sub_indexにオーバーレイのインデックス番号が入ります。
オーバーレイされたファイルのアイコンが表示できます。
フラグに指定する、
INDEXTOOVERLAYMASK(sub_index)
これが重要!
例)
上で取得したハンドルとアイコンインデックスを使ってアイコンを表示する関数
void draw_icon(HDC hDC, HANDLE handle, int x, int y, int d_no)
{
DWORD index;
DWORD sub_index;
index = d_no & 0x00FFFFFF;
sub_index = (d_no & 0x0F000000) >> 24;
ImageList_DrawEx(handle,
index,
hDC,
x,
y,
16,
16,
CLR_NONE,
CLR_NONE,
INDEXTOOVERLAYMASK(sub_index) | ILD_NORMAL);
}