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是一个数组! 展开
{
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是一个数组! 展开
展开全部
你的这个函数的算法思路是:对指定节点开始,寻找其兄弟节点和所有字节是否被选中。
第一步:判断当前节点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的兄弟节点,也就是你的这个循环
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是参数传进来的
一开始调用时传属性控件的第一个节点。这样就遍历了所有节点。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询