通過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();
否則系統的圖片都將不可見!!!