アイコン
今までSHGetFileInfoを使ってアイコンの情報を取得していたけど、
サムネイルのテスト実装をしている途中で、縮小版はSHGFI_LARGEICON(32*32)より
大きいアイコン(48*48)を使っていることに気づいた。
SHGFI_LARGEICONでは48*48は取得できそうにない。
やはりエクスプローラでも使っているであろうIExtractIconを使うしかないか。
IExtractIconの記述には、SHGetFileInfoは融通が利かずかなり遅い、
IExtractIconは非同期にも対応と書いてあるので、こちらを使うべきだろう。
とりあえず一旦、IExtractIcon変えてみた。
だらだらと書いてあるので遅いけど、後で最適化するつもり。
とりあえず、後で、というのが増えてきたなぁ。
そろそろコードの整理をしたい。
// IExtractIcon取得 IExtractIcon* ei; HRESULT hr; UINT reserved; hr = sf->GetUIObjectOf(NULL, 1, il, IID_IExtractIcon, &reserved, (LPVOID*)&ei); // Location取得 TCHAR path[MAX_PATH] = _T(""); int index = 0; UINT flags = 0; hr = ei->GetIconLocation(GIL_FORSHELL, path, MAX_PATH, &index, &flags); // アイコン取得 HICON small, large; hr = ei->Extract(path, index, &large, &small, MAKELONG(96, 16)); ei->Release(); // 描画
- DrawIconEx(dc, 0, 0, large, 96, 96, 0, NULL, DI_NORMAL);
- DestroyIcon(large);
- DestroyIcon(small); // これを忘れていてリークしていた。