Mar*_*Wan 5 c++ windows winapi windows-shell
我有一些代码从文件中获取巨型图标:
// Get the image list index of the icon
SHFILEINFO sfi;
if (!SHGetFileInfo(pszPath, 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX)) return NULL;
// Get the jumbo image list
IImageList *piml;
if (FAILED(SHGetImageList(SHIL_JUMBO, IID_PPV_ARGS(&piml)))) return NULL;
// Extract an icon
HICON hico;
piml->GetIcon(sfi.iIcon, ILD_SCALE|ILD_TRANSPARENT, &hico);
Run Code Online (Sandbox Code Playgroud)
现在,问题是,如果路径没有与之关联的256x256图标,我不希望ImageList返回图标.(它将有助于采用32x32并将其放入256x256图标,我无法使用).
那么,有没有办法找出,如果与路径相关联的图标有一个巨型图标,或者确实只是一个缩放的32x32?如果没有,我将获得常规系统图标.
最终解决方案受Jonathan的启发:
HBITMAP hbitmapForFile(LPCWSTR path, int w, int h)
{
IShellItemImageFactory *pif;
HBITMAP hbm;
SIZE sz = { w, h };
SHCreateItemFromParsingName(path, NULL, IID_PPV_ARGS(&pif));
pif->GetImage(sz, SIIGBF_RESIZETOFIT, &hbm);
pif->Release();
return hbm;
}
Run Code Online (Sandbox Code Playgroud)
我拿出结果HBITMAP并将其放入STATIC控件中SS_BITMAP.
我学到了一件重要的事情:你不能IShellItemImageFactory在HookProc中使用from.已知的Windows限制; 我不得不到PostMessage窗口然后使用它.
我认为执行此操作的正确方法是不使用SHGetFileInfo而是使用IShellItemImageFactory::GetImage带有SIIGBF_THUMBNAILONLY标志的方法。
| 归档时间: |
|
| 查看次数: |
872 次 |
| 最近记录: |