通过SHGetFileInfo函数即可获得系统的图片。
WINSHELLAPI DWORD WINAPI SHGetFileInfo( LPCTSTR pszPath, DWORD dwFileAttributes, SHFILEINFO FAR* psfi, UINT cbFileInfo, UINT uFlags );
其实MSDN上有详细的介绍,还有例子。
这里我只是给出我的例子:
CImageList m_ImageList;
HIMAGELIST hImlSys;
SHFILEINFO ssfi;
memset(&ssfi,0,sizeof(ssfi));
hImlSys = (HIMAGELIST)SHGetFileInfo(
L"//",
0,
&ssfi,
sizeof(SHFILEINFO),
SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_ICON);
m_ImageList.Attach(hImlSys);
这里就将系统的所有图片加载到m_ImageList中了,因为有了SHGFI_USEFILEATTRIBUTES ,所以第一个参数
会被忽略。
但是我想获得某个指定的图片,怎办呢?还是这个函数:
CString strFilePath;//假设这个是某个文件或文件夹的路径,例如_T"//Program Files//Liam.exe"
SHFILEINFO ssfi;
memset(&ssfi,0,sizeof(ssfi));
SHGetFileInfo(
strFilePath,
0,
&ssfi,
sizeof(SHFILEINFO),
/*SHGFI_USEFILEATTRIBUTES | */SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_ICON);
ssfi.iIcon返回的是一个整数值,返回的是这个图片在刚才加入的图片列表中的索引位置,那么在InsertItem的时候就
可以将其设置并显示了。
尤其需要注意的是,一定记得m_ImageList.Detach();
否则系统的图片都将不可见!!!