如果你是想自己定义一种排序的规则,可以调用CTreeCtrl的SortChildrenCB,但是需要自己提供一个回调函数来实现这种规则。MSDN上有例子:static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { // lParamSort contains a pointer to the tree control. // The lParam of an item is just its handle, // as specified with <A HREF="_mfc_ctreectrl.3a3a.setitemdata.htm">SetItemData</A> CTreeCtrl* pmyTreeCtrl = (CTreeCtrl*) lParamSort; CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam1); CString strItem2 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam2); return strcmp(strItem2, strItem1); } // The pointer to my tree control. extern CTreeCtrl* pmyTreeCtrl; TVSORTCB tvs; // Sort the tree control's items using my // callback procedure. tvs.hParent = TVI_ROOT; tvs.lpfnCompare = MyCompareProc; tvs.lParam = (LPARAM) pmyTreeCtrl; pmyTreeCtrl->SortChildrenCB(&tvs);
BOOL SortChildren( HTREEITEM hItem );
pmyTreeCtrl->SortChildren(TVI_ROOT);
MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// lParamSort contains a pointer to the tree control.
// The lParam of an item is just its handle,
// as specified with <A HREF="_mfc_ctreectrl.3a3a.setitemdata.htm">SetItemData</A>
CTreeCtrl* pmyTreeCtrl = (CTreeCtrl*) lParamSort;
CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam1);
CString strItem2 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam2); return strcmp(strItem2, strItem1);
} // The pointer to my tree control.
extern CTreeCtrl* pmyTreeCtrl;
TVSORTCB tvs; // Sort the tree control's items using my
// callback procedure.
tvs.hParent = TVI_ROOT;
tvs.lpfnCompare = MyCompareProc;
tvs.lParam = (LPARAM) pmyTreeCtrl; pmyTreeCtrl->SortChildrenCB(&tvs);