void CSelectReceiverDlg::TravelChild(HTREEITEM hItem, BOOL ItemFlag)
{
HTREEITEM hChildItem,hBrotherItem;
//查找子节点,没有就结束
hChildItem = m_tree.GetChildItem(hItem);
if(hChildItem!=NULL)
{
//设置子节点的状态与当前节点的状态一致
m_tree.SetCheck(hChildItem,ItemFlag);
// CTreeCtrl::SetItemState( hChildItem, INDEXTOSTATEIMAGEMASK(nState), TVIS_STATEIMAGEMASK );
//再递归处理子节点的子节点和兄弟节点
TravelChild(hChildItem, ItemFlag);
//处理子节点的兄弟节点和其子节点
hBrotherItem=m_tree.GetNextSiblingItem(hChildItem);
while (hBrotherItem)
{
//设置子节点的兄弟节点状态与当前节点的状态一致
m_tree.SetCheck(hBrotherItem,ItemFlag);
// int nState1 = GetItemState( hBrotherItem, TVIS_STATEIMAGEMASK ) >> 12;
// if(nState1!=0)
// {
// CTreeCtrl::SetItemState( hBrotherItem, INDEXTOSTATEIMAGEMASK(nState), TVIS_STATEIMAGEMASK );
// }
//再递归处理子节点的兄弟节点的子节点和兄弟节点
TravelChild(hBrotherItem, ItemFlag);
hBrotherItem=m_tree.GetNextSiblingItem(hBrotherItem);
}
}
}
void CSelectReceiverDlg::TravelSiblingAndParent(HTREEITEM hItem, BOOL bItemFlag)
{
BOOL Flag1,Flag2;
HTREEITEM hNextSiblingItem,hPrevSiblingItem,hParentItem;
Flag1=bItemFlag;
hNextSiblingItem=m_tree.GetNextSiblingItem(hItem);
while(hNextSiblingItem!=NULL)
{
Flag2=m_tree.GetCheck(hNextSiblingItem);
if(Flag1!=Flag2)
break;
else
{
hNextSiblingItem=m_tree.GetNextSiblingItem(hNextSiblingItem);
if(hNextSiblingItem!=NULL)
Flag2=m_tree.GetCheck(hNextSiblingItem);
}
}
hPrevSiblingItem=m_tree.GetPrevSiblingItem(hItem);
while(hPrevSiblingItem!=NULL)
{
Flag2=m_tree.GetCheck(hPrevSiblingItem);
if(Flag1!=Flag2)
break;
else
{
hPrevSiblingItem=m_tree.GetPrevSiblingItem(hPrevSiblingItem);
if(hPrevSiblingItem!=NULL)
Flag2=m_tree.GetCheck(hPrevSiblingItem);
}
}
if(Flag1==Flag2)
{
hParentItem=m_tree.GetParentItem(hItem);
if(hParentItem!=NULL)
{
m_tree.SetCheck(hParentItem,Flag2);
TravelSiblingAndParent(hParentItem,Flag2);
}
}
}