我在一个LISTCTRL中显示某个目录下的所有文件和文件夹,但文件和文件夹的顺序是乱的
请问该如何对这些文件和文件夹进行排序.就象WINDOWS的一样,文件夹排在前面,文件按序排在后边.

解决方案 »

  1.   

    需要写一个sort的回调函数
      

  2.   

    sort涵数和CALL BACK涵数都写好了,可是排不出我想要的序啊,文件和文件夹还是夹杂混在一起
    不象资源管理器里的那样文件夹都排在文件的前边.
    int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    {
    CRecordListCtrl* pV=(CRecordListCtrl*)lParamSort;
        
        CString strItem1, strItem2;
        LVFINDINFO info;
        int nIndex;
        info.flags = LVFI_PARAM;//设置为LVFI_PARAM,后面的FindItem才能有效,详情参考MSDN的LVFINDINFO    info.lParam = lParam1;    //由item data(lParam1)得到对应的item text
        if ( (nIndex = pV->FindItem(&info)) != -1)
    {
            strItem1 = pV->GetItemText(nIndex, pV->m_nSortedCol);
    }

        info.lParam = lParam2;    //由item data(lParam2)得到对应的item text
        if ( (nIndex = pV->FindItem(&info)) != -1)
    {
    strItem2 = pV->GetItemText(nIndex, pV->m_nSortedCol);
    } int iCompRes;
    if (pV->m_nSortedCol == 6 || pV->m_nSortedCol == 8)
        {
    iCompRes = (atoi(strItem1) < atoi(strItem2))?1:-1;
    //iCompRes = strcmp(strItem1, strItem2);
    }
    else
    {
    iCompRes = strcmp(strItem1, strItem2);
    }
        
        //根据当前的排序方式进行调整
        if(pV->m_fAsc)
            return iCompRes;
        else
            return iCompRes*-1;}