MFC 树控件

voidC做Dlg::IterateTree(HTREEITEMhItem){if(hItem!=NULL){if(m_OrgInfo.GetCheck(hItem)){... void C做Dlg::IterateTree(HTREEITEM hItem)

{

if (hItem != NULL)

{

if (m_OrgInfo.GetCheck(hItem))
{

m_SelItemList.Add(hItem);

}
//兄弟节点:
HTREEITEM hSibling = m_OrgInfo.GetNextItem(hItem, TVGN_NEXT);
while (hSibling)

{

if (m_OrgInfo.GetCheck(hSibling))

{

m_SelItemList.Add(hSibling);

}
//兄弟节点的子节点:
HTREEITEM hSibChild = m_OrgInfo.GetChildItem(hSibling);
//如果有子节点的话 就用函数
if (hSibChild)

{

IterateTree(hSibChild);

}
//子节点的下一个节点:
hSibling = m_OrgInfo.GetNextItem(hSibling, TVGN_NEXT);

}

HTREEITEM hChild = m_OrgInfo.GetChildItem(hItem);

if (hChild != NULL)

{

IterateTree(hChild);

}

}

}
问题是while (hSibling)
是什么意思呢?这是个什么条件呢
这个函数是判断节点是否被选中 如果选中 则加入数组 m_SelItemList中去
已知m_SelItemList是一个数组!
展开
 我来答
龚炜林
2014-04-07 · TA获得超过1560个赞
知道大有可为答主
回答量:1102
采纳率:66%
帮助的人:578万
展开全部
你的这个函数的算法思路是:对指定节点开始,寻找其兄弟节点和所有字节是否被选中。
第一步:判断当前节点hItem是否被选中
第二步:循环获取hItem的兄弟节点,也就是你的这个循环
HTREEITEM hSibling = m_OrgInfo.GetNextItem(hItem, TVGN_NEXT);

while (hSibling)

{
...
hSibling = m_OrgInfo.GetNextItem(hSibling, TVGN_NEXT);

}
m_OrgInfo.GetNextItem(hSibling, TVGN_NEXT)是查找hSibling的下一个兄弟节点
如此循环,直到hSibing的下一个节点不是兄弟节点,那么hSibing就返回NULL,即0
跳出while循环。

第三步:查找当前节点的所有子节点。
更多追问追答
追问
第一步的当前节点hItem是指哪个呢?是第一个吗?
追答
hItem是参数传进来的

一开始调用时传属性控件的第一个节点。这样就遍历了所有节点。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式