// 比较函数
int CALLBACK TreeCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CTreeCtrl* pmyTreeCtrl = (CTreeCtrl*)lParamSort;
CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam1);
CString strItem2 = pmyTreeCtrl->GetItemText((HTREEITEM)lParam2);
return strItem2.Compare(strItem1);
}
// 为节点下所有叶子节点排序
void SortTreeLeaf(CTreeCtrl *pTree,HTREEITEM hParentItem)
{
TVSORTCB tvs;
tvs.hParent = hParentItem;
tvs.lpfnCompare = TreeCompare;
tvs.lParam = (LPARAM)pTree;
pTree->SortChildrenCB(&tvs);
}
// 遍历
void TraveAndSortLeafNode(CTreeCtrl *pTree,HTREEITEM hItem)
{
HTREEITEM hChild = pTree->GetChildItem(hItem);
HTREEITEM hNext = nullptr;
while(hChild)
{
hNext = hChild;
if (pTree->ItemHasChildren(hNext))
{
TraveAndSortLeafNode(pTree,hNext);
hChild = pTree->GetNextSiblingItem(hChild);
}
else{
SortTreeLeaf(pTree,hItem);
break;
}
}
}
//调用进行排序
TraveAndSortLeafNode(pResultTree,TVI_ROOT);
经测试,不能正确为树的末端叶子节点排序,问题出在比较函数中不能正确获取文本? why!!