如何在c+中遍历treeview控件的所有父节点+;? 我是C++新手。是否有任何方法可以从树开始遍历所有父节点

如何在c+中遍历treeview控件的所有父节点+;? 我是C++新手。是否有任何方法可以从树开始遍历所有父节点,c++,mfc,treeview,C++,Mfc,Treeview,例: 我想从ParentNode1迭代到ParentNode2 请建议 类包装一个对象。后者提供/。这些成员返回同一层次结构级别上的下一个/上一个treeview项。 如果您正在寻找Windows API解决方案,请改用/macros或发送消息。使用以下函数遍历MFCCTreeCtrl: void TraverseTree(CTreeCtrl* pTreeCtrl) { TraverseTreeBranch(pTreeCtrl, pTreeCtrl->GetRootItem(),

例:

我想从ParentNode1迭代到ParentNode2

请建议

类包装一个对象。后者提供/。这些成员返回同一层次结构级别上的下一个/上一个treeview项。

如果您正在寻找Windows API解决方案,请改用/macros或发送消息。

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

这个答案中的代码没有解决这个问题。在实现时,它访问所有节点。因为它实现了深度优先迭代(与广度优先相比),所以同一级别上的节点迭代与递归调用混合在一起,并且比必要时更难遵循。如果你去掉所有不相关的代码,只显示一个简单的
TraverseSiblings
函数,这将是一个更好的答案。
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);
    }
}