问题:
我扫描一个文件夹内的文件。其中把文件分为,Document、Video、Audio、Graphics、Other。
开始搜索,如果搜到JPG文件,那么判断。m_hTItemGraphics 是否为空
如果 == NULL 那么就m_treeCtrl.InsertItem(......);
但是这样就出现了一个问题,这样创建的顺序,受到了搜索到文件类型的顺序影响。
如果先搜到Graphics文件,那么Graphics会在第一个创建。但是我现在想把这个子节点的顺序定死。
比如第一个是Document,第二个Video......
但是我这边使用TVI_FRIST或者TVI_LAST,那么只会保证一个在最前/最后,其余4个就没有办法保证位置。
那么我有什么办法,可以直接写死这个的顺序呢。
因为我发现如果我在外面创建好子节点,会出现,假设该文件夹内如果没有图片文件,那么就会创建空子节点。

解决方案 »

  1.   

    先把几个分类插入 并记录其 HTREEITEM, 后面检索的文件按分类插入到相应的节点下
      

  2.   

    在内存中存储信息,排序,然后再直接插入到treeitem中。
      

  3.   

    TV_SORTCB      tvscb;
                tvscb.hParent     = pnmtv->itemNew.hItem;
                tvscb.lParam      = 0;
                tvscb.lpfnCompare = TreeViewCompareProc;            Tree.SortChildrenCB(&tvscb /*, FALSE*/);
    ///////////////////////////////////////////////////////////////////////////////////////////////////int CALLBACK CLeftView::TreeViewCompareProc(LPARAM lparam1, 
        LPARAM lparam2, LPARAM lparamSort)
    {
        LPTVITEMDATA lptvid1=(LPTVITEMDATA)lparam1;
        LPTVITEMDATA lptvid2=(LPTVITEMDATA)lparam2;
        HRESULT   hr;    hr = lptvid1->lpsfParent->CompareIDs(0,lptvid1->lpi,lptvid2->lpi);    if (FAILED(hr))
           return 0;    return (short)SCODE_CODE(GetScode(hr));
    }
      

  4.   

    see SortChildrenCB and SortChildren
      

  5.   

    将将得到的结果分类,然后再统计,最后InsertItem到CTreeCtrl中。