总有人间一两风,填我十万八千梦

CTreeCtrl,获取深度和兄弟结点的编号|定位一个HTREEITEM的位置

Windows C/C++ Zero、J 4357℃ 0评论

在使用CTreeCtrl这个树控件的时候,需要获取到相关ITEM的位置信息,比如一个HTREEITEM所在的深度,HTREEITEM所在的深度中兄弟结点的编号是什么,经过一番的研究问题得到了解决,如图是一个CTreeCtrl的使用状态:

treectrl

深度

这里的深度和二叉树上的层次相当,例如上图中有两个深度度为0的ITEM,有多个深度为1的ITEM。

兄弟结点

要想是兄弟结点,那么就应该有同一个“爹”并且处于同一深度,如图中所示,深度1有好几个,但是他们之间的兄弟编号只存在于兄弟结点之间。

对于深度,我在代码种定义深度起始于0号,兄弟结点也起始于0号。

#define FIRST_DEPTH 0x00
//*************************************************获取到ITEM的深度
int CLeftTreeView::GetDepth( HTREEITEM hTreeItem )
{
 int nCount = FIRST_DEPTH-1; 
 while (hTreeItem&&HTREE_ROOT!=hTreeItem)
 {
 hTreeItem = m_lpTreeCtrl->GetParentItem(hTreeItem);
 nCount++;
 }
 return nCount;
}
//*************************************************获取到兄弟编号
int CLeftTreeView::GetSiblingNumber( HTREEITEM hTreeItem )
{
 int nCount = FIRST_DEPTH-1;//初始认-1
 while (hTreeItem)
 {
 hTreeItem = m_lpTreeCtrl->GetPrevSiblingItem(hTreeItem);
 nCount++;
 }
 return nCount;
}

按照上图的实验测试

testtree

转载请注明:悠然品鉴 » CTreeCtrl,获取深度和兄弟结点的编号|定位一个HTREEITEM的位置

喜欢 (3)or分享 (0)
发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址