这个函数用于获取指定文件的高分辨率图标。函数接受一个指向文件路径的指针,返回一个 HICON
类型的图标句柄。
这个函数的实现过程如下:
- 使用
SHGetFileInfo
函数获取指定文件的系统图标索引。 - 使用
SHGetImageList
函数获取大号图像列表。 - 使用
IImageList
接口的GetIcon
函数提取指定索引的图标。 - 清理资源并返回图标句柄。
#include <commoncontrols.h>
#include <shellapi.h>
HICON GetFileIcon(LPTSTR pszPath)
{
// 获取图标的图像列表索引
SHFILEINFO sfi;
if (!SHGetFileInfo(pszPath, 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX)) return NULL;
// 获取大号图像列表
IImageList *piml;
if (FAILED(SHGetImageList(SHIL_JUMBO, IID_PPV_ARGS(&piml))) return NULL;
// 提取图标
HICON hico;
piml->GetIcon(sfi.iIcon, ILD_TRANSPARENT, &hico);
// 清理资源
piml->Release();
// 返回图标
return hico;
}
SHIL
枚举类型成员对应的图像尺寸:
SHIL_LARGE
:通常对应 32x32 像素大小的图像。SHIL_SMALL
:通常对应 16x16 像素大小的图像。SHIL_EXTRALARGE
:通常对应 48x48 像素大小的图像。SHIL_SYSSMALL
:通常对应 16x16 像素大小的图像。SHIL_JUMBO
:通常对应 256x256 像素大小的图像。