如何在c++中遍历treeview控件的所有父节点

How to iterate through all parent nodes of treeview control in c++?

本文关键字:控件 父节点 treeview 遍历 c++      更新时间:2023-10-16

我是c++新手。有没有办法从树开始遍历所有父节点?

示例:

ParentNode1->Child1
           ->Child2
ParentNode2->Child1
           ->Child2

我想从ParentNode1迭代到ParentNode2。

请建议。

使用以下函数遍历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);
    }
}

CTreeView类包装了一个CTreeCtrl对象。后者提供了CTreeCtrl::GetNextSiblingItem/CTreeCtrl::GetPrevSiblingItem。那些成员返回下一个/上一个树视图项目,它们在相同的层次结构级别上。


如果你正在寻找一个Windows API的解决方案,使用TreeView_GetNextSibling/TreeView_GetPrevSibling宏代替,或发送一个TVM_GETNEXTITEM消息。