下面的代码只是参考,可以忽略,直接看最下面的问题。。 CoInitialize(NULL);//初始化COM
HIMAGELIST hImageList; //创建ImageList
SHFILEINFO shFi;//定义文件信息变量
//获取文件图标信息
hImageList = (HIMAGELIST)SHGetFileInfo("..",0,&shFi,sizeof(shFi),SHGFI_SYSICONINDEX|SHGFI_SMALLICON);
//将文件图象列表存入m_ctImageList

m_ImageList_ListCtrl.m_hImageList = hImageList;
m_List_Ftp_View.SetImageList(&m_ImageList_ListCtrl,LVSIL_SMALL);------------------------ 上面的代码是 获得文件图标 并设置到 m_List_Ftp_View 中(CListCtrl)
//提取后缀名 .txt 等
CString strHouz = file.strFileName.Right(file.strFileName.GetLength() - file.strFileName.ReverseFind('.'));
int icon = GetFileIcon(file.isDir ? ".." : strHouz);
if (file.isDir )
iItem = 0;
else
iItem = m_List_Ftp_View.GetItemCount();
------------------------ 这里是通过调用 GetFileIcon 获得图标
int CMoliFTPDlg::GetFileIcon(CString fileTypeName)  
{
int iIcon = 0;
SHFILEINFO shFileInfo;
if( ! SHGetFileInfo(fileTypeName,FILE_ATTRIBUTE_NORMAL,&shFileInfo,sizeof(shFileInfo), SHGFI_ICON|SHGFI_USEFILEATTRIBUTES))
return iIcon;
iIcon=shFileInfo.iIcon;
DestroyIcon(shFileInfo.hIcon);//销毁ICON return iIcon;
}
------------------------ 这里是获得 不同后缀的文件的 图标问题为什么无法获得 文件夹 的 图标呢。我一个一个图标的看,发现只得到10个图标文件。。不知道why~图片如这个 http://mymoli.cn/ftpmini.jpg   我都干脆用 驱动盘 的图标了。。- -!

解决方案 »

  1.   

    文件夹图标在注册表中的DefaultIcon键值为%SystemRoot%\System32\shell32.dll,3
    其实也就是Shell32.dll里的第三个图标。
    你用ExtractIcon或者ExtractIconEx,把参数填好后从这个文件里取出第三个图标来就好了
    同样的,默认EXE以及其他类型的图标都在这个shell32.dll文件里,根据不同的索引序号去就可以了。
      

  2.   

    顶楼上,比较详细
    ExtractIcon