在使用CTreeCtrl这个树控件的时候,需要获取到相关ITEM的位置信息,比如一个HTREEITEM所在的深度,HTREEITEM所在的深度中兄弟结点的编号是什么,经过一番的研究问题得到了解决,如图是一个CTreeCtrl的使用状态:
深度
这里的深度和二叉树上的层次相当,例如上图中有两个深度度为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; }