treectrl遍历


树是一种十分重要的数据结构。在程序设计中,我们经常用树来组织数据。对于树的遍历也是一种常规的运算,下面提供了两个算法。前面一个只是简单的遍历了所有的结点,后面一个则可以根据传入条件返回相应的结点。

/*
 * 功能:遍历CTreeCtrl所有结点
 * 参数:tree-要遍历的CTreeCtrl控件变量、hItem-开始变量的根结点(如果要变量整棵树,则:hItem = tree.GetRootItem())
 * 返值:void
 */
void TravelItem(CTreeCtrl& tree, HTREEITEM hItem)  
{  
 HTREEITEM hCurItem = tree.GetChildItem(hItem);
 HTREEITEM hNextItem;
 while(hCurItem)
 {
  OutputDebugString(tree.GetItemText(hCurItem)); // 输出结点文本

  hNextItem = hCurItem;
  TravelItem(tree, hNextItem);
  hCurItem = tree.GetNextSiblingItem(hCurItem);
 }
}


/*
 * 功能:返回指定的树结点
 * 参数:tree-要遍历的CTreeCtrl控件变量、item-开始变量的根结点(如果要变量整棵树,则:hItem = tree.GetRootItem())、
  strText-结点的ItemText值(返回条件)
 * 返值:指定结点的句柄(如果没有符合查找条件的结点,返回NULL)
 */
HTREEITEM FindItem(CTreeCtrl& tree, HTREEITEM item, CString strText)
{
 HTREEITEM hFind; 
 if(item == NULL)
  return NULL;

 while(item != NULL)
 {
  if(tree.GetItemText(item) == strText)
   return item;

  if(tree.ItemHasChildren(item))
  {
   item = tree.GetChildItem(item);
   hFind = FindItem(tree, item, strText);  
   if(hFind)
   {
    return hFind;  
   }
   else
   {
    item= tree.GetNextSiblingItem(tree.GetParentItem(item));
   }
  }
  else
  {
   item = tree.GetNextSiblingItem(item);
   if(item == NULL)
    return NULL;
  }  
 }

 return item;
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/smecf/archive/2008/07/24/2707028.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Treectrl 是一个在文件目录中显示文件和文件夹结构的控件,它在 C 语言中也有相应的应用示例。 假设我们有一个文件目录的结构如下: - 文件夹A - 文件1.txt - 文件2.txt - 文件夹B - 文件3.txt - 文件夹C - 文件4.txt 现在我们想在应用程序中使用 Treectrl 控件来显示上述文件目录。首先,我们需要创建一个 Treectrl 控件,可以使用创建窗口的相关函数来实现。然后,我们将通过添加节点的方式来构建文件目录结构。 在 C 语言中,可以使用 Treectrl 相关的 API 函数来操作和管理控件。例如,可以使用插入节点函数 `TreeInsertItem` 来添加文件夹和文件节点。我们可以通过提供节点的文本、图标和父节点等信息来插入节点。 对于上述文件目录结构的例子,我们可以首先插入文件夹 A 的节点,并将其作为树的根节点。然后,将文件 1.txt 和文件 2.txt 分别插入到文件夹 A 的子节点中。接着,创建文件夹 B 的节点,并将文件 3.txt 插入到文件夹 B 的子节点中。最后,再创建文件夹 C 的节点,并将文件 4.txt 插入到文件夹 C 的子节点中。 通过这样的操作,我们就可以使用 Treectrl 控件来显示文件目录结构了。当用户展开或折叠文件夹节点时,我们可以根据需要动态加载和更新子节点。 总之,Treectrl 控件在 C 语言中提供了一种简单方便的方式来显示文件目录结构。我们可以通过添加、删除、展开、折叠节点等操作以及相关的事件处理来实现对文件目录的交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值