VC++开发GIS系统(85)遍历CTreeCtrl节点(根据名称查找节点)

之前在实现文件显示和隐藏文件激活时候,开始想用遍历CTreeCtrl的方法,不过后来废弃了。但是在网上找到了一个遍历CTreeCtrl的函数,这里分享一下,需要的可以参考,代码如下(下面的函数主要实现的是根据特定名称查找节点,里面用到了CTreeCtrl的遍历)。

// name - 要查找的节点的名称
// tree - 要查找的Tree
// hRoot -根节点(指定特定节点下的)

HTREEITEM FindItem(const CString& name, CTreeCtrl& tree, HTREEITEM hRoot)
{
    // 检查查找的是不是根节点
    CString text = tree.GetItemText(hRoot);
    if (text.Compare(name) == 0)
        return hRoot; 

    // 获取第一个子节点
    HTREEITEM hSub = tree.GetChildItem(hRoot);
    // CTreeCtrl的遍历
    while (hSub)
    {
        // 如果是要查找的节点返回
        HTREEITEM hFound = FindItem(name, tree, hSub);
        if (hFound)
            return hFound; 

        // 如果不是,继续下一个子节点
        hSub = tree.GetNextSiblingItem(hSub);
    } 

    // return NULL if nothing was found
    return NULL;
}

如果是遍历整个树,可以直接用下面的方法

HTREEITEM CTreeDemoDlg::FindItem(const CString& name, CTreeCtrl& tree)
{
    HTREEITEM root = m_tree.GetRootItem();
    while(root != NULL)
    {
        HTREEITEM hFound = FindItem(name, tree, root);
        if (hFound)
            return hFound; 
    
        root = tree.GetNextSiblingItem(root);
    }
    
    return NULL;
}
VC++开发GIS系统(84)warning C4018 有符号无符号不匹配 VC++开发GIS系统(86)创建存储点文件的类

作者:,GIS爱好者。
分享本文,请您带上本文链接
分享到:

发表评论