2015-09-18 88 views

回答

1

使用以下函數來遍歷MFC CTreeCtrl

void TraverseTree(CTreeCtrl* pTreeCtrl) 
{ 
    TraverseTreeBranch(pTreeCtrl, pTreeCtrl->GetRootItem(), TVI_ROOT); 
} 

void TraverseTreeBranch(CTreeCtrl* pTreeCtrl, HTREEITEM hItem, HTREEITEM hParentItem) 
{ 
    // Do stuff with hItem here 

    HTREEITEM hItemTmp = pTreeCtrl->GetChildItem(hItem); 
    while(hItemTmp != NULL) 
    { 
     TraverseTreeBranch(pTreeCtrl, hItemTmp, hNewItem); 
     hItemTmp = GetNextSiblingItem(hItemTmp); 
    } 
} 
+0

的代碼在這個答案沒有解決的問題。如所實施的,它訪問**所有**節點。由於它實現了深度優先迭代(相對於寬度優先),同一級別上的節點迭代與遞歸調用混合在一起,並且難以按照需要進行循環。如果你去掉所有不相關的代碼並且只顯示一個簡單的'TraverseSiblings'函數,它會給出更好的答案。 – IInspectable

相關問題