列表中的文件名在系统中不存在,程序执行后系统图标并不出现,什么原因,代码如下: LV_COLUMN lvColumn;
lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvColumn.fmt = LVCFMT_LEFT; CRect rectClient;
GetClientRect(&rectClient);
int nWidth = rectClient.right-rectClient.left; lvColumn.cx = nWidth/3;
lvColumn.pszText = _T("名字");
    int ret = m_CtlListFile.InsertColumn(1, &lvColumn);

lvColumn.cx = nWidth/6;
lvColumn.pszText = _T("大小");
    m_CtlListFile.InsertColumn(2, &lvColumn); lvColumn.fmt = LVCFMT_RIGHT;
lvColumn.cx = 0;
lvColumn.pszText = _T("位置");
    m_CtlListFile.InsertColumn(3, &lvColumn);

lvColumn.fmt = LVCFMT_RIGHT;
lvColumn.cx = nWidth/4;
lvColumn.pszText = _T("类型");
    m_CtlListFile.InsertColumn(4, &lvColumn);

lvColumn.fmt = LVCFMT_RIGHT;
lvColumn.cx = nWidth/6;
lvColumn.pszText = _T("修改时间");
    m_CtlListFile.InsertColumn(5, &lvColumn); LV_ITEM lvitem;
//显示包的内容
int iPos;
POSITION position = EncryptedFileHead.EFHead.GetHeadPosition();
HEADINFO FHead;
while(position != NULL)
{
FHead = EncryptedFileHead.EFHead.GetNext(position);
lvitem.mask=LVIF_TEXT|LVIF_PARAM|LVIF_IMAGE ;
lvitem.iItem=0;
lvitem.iSubItem=0;
CString Temp = FHead.Path;
lvitem.pszText = Temp.GetBuffer(Temp.GetLength());//文件名
lvitem.iImage=1;
lvitem.lParam=0;
iPos=m_CtlListFile.InsertItem(&lvitem);//返回表项插入后的索引号 lvitem.mask=LVIF_TEXT;
lvitem.iItem=iPos;
        lvitem.iSubItem=1;
char temp[20];
itoa(FHead.OldLength,temp,10);
lvitem.pszText=temp;
m_CtlListFile.SetItem(&lvitem); lvitem.mask=LVIF_TEXT;
lvitem.iItem=iPos;
lvitem.iSubItem=2;
itoa(FHead.FilePos,temp,10);
lvitem.pszText=temp;
m_CtlListFile.SetItem(&lvitem);
} int nHdrCnt = m_CtlListFile.GetItemCount();
ASSERT(nHdrCnt == 0); // Retrieve the system image list
SHFILEINFO sfi;
memset(&sfi, 0, sizeof(sfi));
HIMAGELIST hil = reinterpret_cast<HIMAGELIST> (
SHGetFileInfo (
"C:\\", 
0, 
&sfi, 
sizeof(sfi), 
SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES)
);
if (hil)
{
m_SmallImgList.Attach (hil);
m_CtlListFile.SetImageList (&m_SmallImgList, LVSIL_SMALL);
}

//设置为详细列表形式
DWORD dwStyle = -1;
dwStyle = LVS_REPORT;
if (dwStyle != -1)
ModifyStyle(LVS_TYPEMASK, dwStyle); m_CtlListFile.SetCheck(0);
ListView_SetExtendedListViewStyle(m_CtlListFile.GetSafeHwnd(),
             LVS_EX_FULLROWSELECT);

解决方案 »

  1.   

    设置imagelist(setImageList)应在insertItem之前。要不然你的image index是什么呢?
      

  2.   

    SetImageList应在InsertItem之前完成,要不然image index为何值呢?
      

  3.   

    哪位高人看看,修改后的代码为:(还是不行) HIMAGELIST himlSmall ;
        SHFILEINFO sfi ;    himlSmall = (HIMAGELIST)SHGetFileInfo((LPCSTR)"C:\\", 
                                               FILE_ATTRIBUTE_NORMAL,
                                               &sfi, 
                                               sizeof(SHFILEINFO), 
       SHGFI_PIDL | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);//SHGFI_SYSICONINDEX | SHGFI_SMALLICON) ;
        if( himlSmall )
        m_SmallImgList->Attach(himlSmall); //把ImageList加入到ListView里
        if( m_SmallImgList != NULL)
    m_CtlListFile.SetImageList(m_SmallImgList, LVSIL_SMALL); LV_COLUMN lvColumn;
    lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
    lvColumn.fmt = LVCFMT_LEFT; CRect rectClient;
    GetClientRect(&rectClient);
    int nWidth = rectClient.right-rectClient.left; lvColumn.cx = nWidth/3;
    lvColumn.pszText = _T("名字");
        int ret = m_CtlListFile.InsertColumn(1, &lvColumn);

    lvColumn.cx = nWidth/6;
    lvColumn.pszText = _T("大小");
        m_CtlListFile.InsertColumn(2, &lvColumn); lvColumn.fmt = LVCFMT_RIGHT;
    lvColumn.cx = 0;
    lvColumn.pszText = _T("位置");
        m_CtlListFile.InsertColumn(3, &lvColumn);

    lvColumn.fmt = LVCFMT_RIGHT;
    lvColumn.cx = nWidth/4;
    lvColumn.pszText = _T("类型");
        m_CtlListFile.InsertColumn(4, &lvColumn);

    lvColumn.fmt = LVCFMT_RIGHT;
    lvColumn.cx = nWidth/6;
    lvColumn.pszText = _T("修改时间");
        m_CtlListFile.InsertColumn(5, &lvColumn); CEncryptedFileHead EncryptedFileHead;
    EncryptedFileHead.Load(Path); //生成图标 POSITION position = EncryptedFileHead.EFHead.GetHeadPosition();
    HEADINFO FHead;
    /* while(position != NULL)
    {
    FHead = EncryptedFileHead.EFHead.GetNext(position);
    CString Temp = FHead.Path;
    SHFILEINFO sfi;
    SHGetFileInfo(".zip", FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX |SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
    m_SmallImgList->Add(sfi.hIcon);
    }*/ LV_ITEM lvitem;
    //显示包的内容
    int iPos;
    position = EncryptedFileHead.EFHead.GetHeadPosition();
    int idxidx = 0;
    while(position != NULL)
    {
    FHead = EncryptedFileHead.EFHead.GetNext(position);
    lvitem.mask=LVIF_TEXT|LVIF_PARAM|LVIF_IMAGE ;
    lvitem.iItem=0;
    lvitem.iSubItem=0;
    CString Temp = FHead.Path;
    lvitem.pszText = Temp.GetBuffer(Temp.GetLength());
    SHFILEINFO sfi;
    lvitem.iImage=SHGetFileInfo(lvitem.pszText, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_PIDL | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
    lvitem.lParam=0; iPos=m_CtlListFile.InsertItem(&lvitem);//返回表项插入后的索引号 lvitem.mask=LVIF_TEXT;
    lvitem.iItem=iPos;
            lvitem.iSubItem=1;
    char temp[20];
    itoa(FHead.OldLength,temp,10);
    lvitem.pszText=temp;
    m_CtlListFile.SetItem(&lvitem); lvitem.mask=LVIF_TEXT;
    lvitem.iItem=iPos;
    lvitem.iSubItem=2;
    itoa(FHead.FilePos,temp,10);
    lvitem.pszText=temp;
    AllFilePos.Add(temp);
    m_CtlListFile.SetItem(&lvitem); }

    //设置为详细列表形式
    DWORD dwStyle = -1;
    dwStyle = LVS_REPORT;
    if (dwStyle != -1)
    ModifyStyle(LVS_TYPEMASK, dwStyle); m_CtlListFile.SetCheck(0);
    ListView_SetExtendedListViewStyle(m_CtlListFile.GetSafeHwnd(),
                 LVS_EX_FULLROWSELECT);