先用SHGetFileInfo获得系统的图标列表,将起装入一个ImageList,再用SHGetFileInfo获得该文件类型的图标索引。从ImageList中获得指定的图标即可。
在C++Builder中的代码如下:
第一步
THandle ImageList;
SHFILEINFO * FileInfo=new SHFILEINFO();
ImageList=SHGetFileInfo("C:\\",0,FileInfo,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX and SHGFI_SMALLICON);
SendMessage(lstvwFiles->Handle,LVM_SETIMAGELIST,LVSIL_SMALL,ImageList);
ImageList=SHGetFileInfo("C:\\",0,FileInfo,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX and SHGFI_LARGEICON);
SendMessage(lstvwFiles->Handle,LVM_SETIMAGELIST,LVSIL_NORMAL,ImageList);
delete FileInfo;
第二步
int IconFlag=SHGFI_SYSICONINDEX and SHGFI_LARGEICON ;
SHFILEINFO * FileInfo=new SHFILEINFO();
SHGetFileInfo(FileName ,0,FileInfo,sizeof(SHFILEINFO),IconFlag);
FileInfo->iIcon所表示的既是图标索引值。
详情可以参见MSDN的帮助。
在C++Builder中的代码如下:
第一步
THandle ImageList;
SHFILEINFO * FileInfo=new SHFILEINFO();
ImageList=SHGetFileInfo("C:\\",0,FileInfo,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX and SHGFI_SMALLICON);
SendMessage(lstvwFiles->Handle,LVM_SETIMAGELIST,LVSIL_SMALL,ImageList);
ImageList=SHGetFileInfo("C:\\",0,FileInfo,sizeof(SHFILEINFO),SHGFI_SYSICONINDEX and SHGFI_LARGEICON);
SendMessage(lstvwFiles->Handle,LVM_SETIMAGELIST,LVSIL_NORMAL,ImageList);
delete FileInfo;
第二步
int IconFlag=SHGFI_SYSICONINDEX and SHGFI_LARGEICON ;
SHFILEINFO * FileInfo=new SHFILEINFO();
SHGetFileInfo(FileName ,0,FileInfo,sizeof(SHFILEINFO),IconFlag);
FileInfo->iIcon所表示的既是图标索引值。
详情可以参见MSDN的帮助。
解决方案 »
- 关于CreateFile问题
- 怎样实现开机不加载disk.sys这个内核?
- 什么叫做32位操作系统?
- 安装VC++6.0后,启动windows median palyer,会启动vc,然后出现错误信息!
- dbgrid 设置数据源能不能在程序里实现?如何实现?
- 请各位帮我看一看这个程序!!
- 串口通讯接收数据问题!!急
- ◎==100分:有关编译器的问题?==◎
- 请高手别嫌问题简单!如何屏蔽对话框的Esc键和回车退出?很急很急!
- 请问WIN32API一点问题
- 急啊, 谁能告诉我 标准UML英文文档在哪里可以下载 (与具体程序语言无关的) ??????
- 请问如何在视类(CFormView)里获得框架(CMainFrm)类的成员变量?
HIMAGELIST GetSmallSysImgList(CString filename)
{
SHFILEINFO shFinfo;
HIMAGELIST hImgList = (HIMAGELIST)SHGetFileInfo(filename,
0,
&shFinfo,
sizeof( shFinfo ),
SHGFI_SYSICONINDEX |
SHGFI_SMALLICON );
if (!hImgList)
return FALSE; return hImgList; // OK
}int GetSmallFileIcon(CString file)
{
SHFILEINFO shFinfo; if ( !SHGetFileInfo(file,
0,
&shFinfo,
sizeof( shFinfo ),
SHGFI_ICON |
SHGFI_SMALLICON ) )
return 0; return shFinfo.iIcon;
}