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;
}
如果本文对你有所帮助,欢迎对我们团队进行打赏捐助,让我们在传播3S的路上可以走得更远。
赞赏支持
微信捐助麻辣GIS 支付宝捐助麻辣GIS

麻辣GIS-Sailor
作者:
GIS爱好者,学GIS,更爱玩GIS。

如您有疑问,可在文末留言,也可在 麻辣GIS•小分队 搜索回答或发帖 ,还可以在QQ群中提问。

本站QQ群(一):291616564 麻辣GIS

本站QQ群(二):166408035 麻辣GIS(二)

本站QQ群(三):627853279 麻辣GIS(三)

微信公众号:malagis,扫描右边二维码直接关注。

发表评论