程序片断如下
CFtpFileFind finder(pFtp);
BOOL bSuccess=finder.FindFile(_T("*"));
CStringArray m_Ext;
while (bSuccess){
bSuccess=finder.FindNextFile();
if (finder.IsDots()){
continue;
}
if (finder.IsHidden()){
continue;
}
if (finder.IsDirectory()){
m_Ext.Add(finder.GetFileName());
}
else {
m_Ext.Add(finder.GetFileName());
} }
CImageList m_Image;
SHFILEINFO shFi;
m_Image.Create(16,16,0,0,3); for (int i=0;i<m_Ext.GetSize();i++){
memset(&shFi,0,sizeof(shFi));
SHGetFileInfo(m_Ext.GetAt(i),FILE_ATTRIBUTE_NORMAL,&shFi,
sizeof(shFi),
SHGFI_ICON | SHGFI_SMALLICON | 
SHGFI_USEFILEATTRIBUTES | SHGFI_DISPLAYNAME |
SHGFI_TYPENAME);
if (shFi.hIcon!=NULL){
m_Image.Add(shFi.hIcon);
}

}
m_list.SetImageList(&m_Image,LVSIL_SMALL);
for (int j=0;j<m_Ext.GetSize();j++){
m_list.InsertItem(i,m_Ext.GetAt(j),j++);
}可是图标死活出不来,只是显示一小块空白...
不过如果单步执行的话就可以看到图标...
当然也不是我想象中那个...
但是编译后运行就是不行...
晕啊..谁救救我..

解决方案 »

  1.   

    你只是把CImageList加到了CListCtrl,和插入了Item
    并没有设置Item的iImage(见LVITEM结构)的索引值,你可以使用
    BOOL SetItem( int nItem, int nSubItem, UINT nMask, LPCTSTR lpszItem, int nImage, UINT nState, UINT nStateMask, LPARAM lParam );其实我也不是很清楚,你可以自己试试
      

  2.   

    m_list.InsertItem(i,m_Ext.GetAt(j),j++);
                                       ~~~~~~~~~~这个不是吗??
      

  3.   

    把CImageList m_Image;放在头文件中,因为对于在你的程序片断中,m_Image仅仅作用于该断,当出了这段的时候,m_Image就失效了,所以m_list也无法正确显示图标了
    要求:m_Image的生存期大于等于m_list的生存期
      

  4.   

    把你的这句CImageList m_ImageList;
    放到你的头文件中定义,你在这里定义的话有可能作用域不够!
      

  5.   

    m_Image.Create(16,16,0,0,3);-->
    m_Image.Create(16,16,ILC_COLOR32 | ILC_MASK, 0, 3);