一個(gè)系統(tǒng)圖象列表包括每個(gè)文件、文件夾、縮略圖的圖標(biāo)。根據(jù)這個(gè)就可以建立一個(gè)自定義的資源管理器風(fēng)格的運(yùn)用程序。第一步包括從系統(tǒng)獲得大小圖標(biāo)(假如你都你都需要的話),然后就是將他們分別分配給一個(gè)CImageList對(duì)象并把它們添加給你的列表控件。最后不要忘了在析構(gòu)函數(shù)里執(zhí)行Detach()操作,否則系統(tǒng)中所有的圖標(biāo)將消失,你只能重新啟動(dòng)你的計(jì)算機(jī)了(我就碰到過好幾次這樣的教訓(xùn))。
首先,在你的列表控件類里添加下面兩個(gè)數(shù)據(jù)成員:
CImageList m_smallImageList; CImageList m_largeImageList; 接著,添加這個(gè)函數(shù): void CSystemListCtrl::InitializeSystemImageList() { //建立圖象列表 HIMAGELIST hSystemSmallImageList, hSystemLargeImageList; SHFILEINFO ssfi, lsfi;
//獲得指向系統(tǒng)小圖標(biāo)的句柄 hSystemSmallImageList = (HIMAGELIST)SHGetFileInfo( (LPCTSTR)_T("C:\\"), 0, &ssfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON); //把它分配給小圖象列表 //不要忘了在你的析構(gòu)函數(shù)里執(zhí)行m_smallImageList.Detach()操作
m_smallImageList.Attach(hSystemSmallImageList);
//對(duì)大圖標(biāo)做同樣的工作 hSystemLargeImageList = (HIMAGELIST)SHGetFileInfo( (LPCTSTR)_T("C:\\"), 0, &lsfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_ICON); m_largeImageList.Attach(hSystemLargeImageList);
//給列表控件設(shè)置圖象列表 SetImageList(&m_smallImageList, LVSIL_SMALL); SetImageList(&m_largeImageList, LVSIL_NORMAL); } 同時(shí),你需要下面這個(gè)函數(shù)來取得你要顯示的每一項(xiàng)的圖標(biāo)的ID。 int CSystemListCtrl::GetIconIndex(const CString& csFileName) //完整的路徑以及文件名 { SHFILEINFO sfi;
SHGetFileInfo((LPCTSTR)csFileName,0,&sfi,sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON );
return sfi.iIcon; }
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!