void CFileSysEX::GetFileIconEx(CString strFilename,int i)
{
CString str;
str="*"+GetFileLastname(strFilename);
memset(&sfi,0,sizeof(sfi));
if (SHGetFileInfo(str,FILE_ATTRIBUTE_NORMAL,&sfi,sizeof(SHFILEINFO),SHGFI_USEFILEATTRIBUTES | SHGFI_DISPLAYNAME | SHGFI_TYPENAME |SHGFI_ICON|SHGFI_SMALLICON ))
{
if (GetFileLastname(strFilename)=="."||GetFileLastname(strFilename)=="..")
{
// m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON2));//::DestroyIcon(sfi.hIcon);
}
else
{
m_imagelist.Add(sfi.hIcon);
}
}
   ::DestroyIcon(sfi.hIcon);
}

解决方案 »

  1.   

    ::ExtractIcon ( AfxGetInstanceHandle(), "fileName", 0 /* index */);
      

  2.   

    这样是可以的:
    m_Image.Create( 16,16,ILC_MASK,0,6);
    SHFILEINFO shFi;
    memset(&shFi,0,sizeof(shFi));
    SHGetFileInfo(m_Ext.GetAt(i),FILE_ATTRIBUTE_NORMAL,&shFi,
    sizeof(shFi),
    SHGFI_ICON | SHGFI_SMALLICON | 
    SHGFI_USEFILEATTRIBUTES  );
    if (shFi.hIcon!=NULL)
    {
    m_Image.Add(shFi.hIcon);
    }
      

  3.   

    加的时候不应该用hIcon,而是要用iIcon(图标的序号)SHFILEINFO    sfi;
    SHGetFileInfo("文件路径", 
                      0,
                      &sfi, 
                      sizeof(SHFILEINFO), 
                      SHGFI_SYSICONINDEX|SHGFI_SMALLICON|SHGFI_DISPLAYNAME);
    LVITEM lvItem;
    memset(&lvItem,0,sizeof(lvItem));

    lvItem.mask     |= LVIF_TEXT|LVIF_IMAGE;
    lvItem.iItem     = 0;
    lvItem.pszText   = "";
    lvItem.iImage    = sfi.iIcon;
    int r = InsertItem(&lvItem);