15,979
社区成员
发帖
与我相关
我的任务
分享
//将系统的ICON列表读取出来,调用一次即可
HIMAGELIST himlSmall;
HIMAGELIST himlLarge;
SHFILEINFO sfi;
himlSmall = (HIMAGELIST)SHGetFileInfo (
NULL,//(LPCSTR)cSysDir,
0,
&sfi,
sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_SMALLICON );
himlLarge = (HIMAGELIST)SHGetFileInfo(
NULL,//(LPCSTR)cSysDir,
0,
&sfi,
sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
if (himlSmall && himlLarge)
{
//使ListCtrl可以显示图标
::SendMessage(GetSafeHwnd(), LVM_SETIMAGELIST,
(WPARAM)LVSIL_SMALL, (LPARAM)himlSmall);
::SendMessage(GetSafeHwnd(), LVM_SETIMAGELIST,
(WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge);
//使用这种方法也可以
//注意:用完后必须使用m_SmallImgList.Detach();
//CImageList m_SmallImgList;
//m_SmallImgList.Attach (himlSmall);
//SetImageList (&m_SmallImgList, LVSIL_SMALL);
}
int CxxxListCtrl::GetIconIndex(LPCTSTR lpszFileName,//文件名(包括完整路径)
BOOL bIsDir,//是否为目录
BOOL bSelected)//是否被选择
{
//获得文件(或者目录)的图标
//返回-1表示错误
SHFILEINFO sfi;
memset(&sfi,0,sizeof(sfi));
if(bIsDir)
{
SHGetFileInfo(lpszFileName,
FILE_ATTRIBUTE_DIRECTORY,
&sfi,
sizeof(sfi),
SHGFI_SMALLICON
| SHGFI_SYSICONINDEX
| SHGFI_USEFILEATTRIBUTES
| (bSelected ? SHGFI_OPENICON : 0)
);
return sfi.iIcon;
}
else
{
SHGetFileInfo(lpszFileName,
FILE_ATTRIBUTE_NORMAL,
&sfi,
sizeof(sfi),
SHGFI_SMALLICON
| SHGFI_SYSICONINDEX
| SHGFI_USEFILEATTRIBUTES
| (bSelected ? SHGFI_OPENICON : 0)
);
return sfi.iIcon;
}
return -1;//错误,返回
}