递归遍历树视图控件选中的节点

来源:互联网 发布:兰州市政府网络留言板 编辑:程序博客网 时间:2024/05/21 14:56

InitDialog.......

// TODO: Add extra initialization here
m_ImageList.Create(24,24,ILC_COLOR24|ILC_MASK,1,1);
m_ImageList.Add(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON1)));
m_ImageList.Add(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON2)));
m_ImageList.Add(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON3)));
m_ImageList.Add(LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON4)));
m_OrgInfo.SetImageList(&m_ImageList,TVSIL_NORMAL);
HTREEITEM hProvince=m_OrgInfo.InsertItem("吉林省",0,0);
HTREEITEM hTown=m_OrgInfo.InsertItem("松原市",1,1,hProvince);
HTREEITEM hTown1=m_OrgInfo.InsertItem("白城市",1,1,hProvince);
m_OrgInfo.InsertItem("吉林市",1,1,hProvince);
m_OrgInfo.InsertItem("长春市",1,1,hProvince);
m_OrgInfo.InsertItem("扶余县",2,2,hTown);
m_OrgInfo.InsertItem("前郭县",2,2,hTown);
m_OrgInfo.InsertItem("长岭县",2,2,hTown);
m_OrgInfo.InsertItem("农安县",2,2,hTown);
m_OrgInfo.InsertItem("宁江区",2,2,hTown1);
m_OrgInfo.InsertItem("江宁区",2,2,hTown1);
m_OrgInfo.SetTextColor(RGB(255,0,0));//设置树视图控件文本颜色




void CDoesZoneDlg::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);//递归调用
}
}


}


void CDoesZoneDlg::OnTest() 
{
m_SelItemList.RemoveAll();//删除所有数组元素
m_SelList.ResetContent();//删除列表控件数据
HTREEITEM hRoot=m_OrgInfo.GetRootItem();//获取根节点
IterateTree(hRoot);//递归遍历节点
int nCount=m_SelItemList.GetSize();//获取数组元素数量
HTREEITEM hItem=NULL;
CString szItemText="";
for(int i=0;i<nCount;i++)//遍历数组元素
{
hItem=m_SelItemList.GetAt(i);//获取指定数组元素
if(hItem!=NULL)
{
szItemText=m_OrgInfo.GetItemText(hItem);//获取节点文本
m_SelList.AddString(szItemText);//将文本添加到列表中
}
}


}