MFC树控件的递归遍历(只有一个父节点,最深子节点为2级,拥有复选框)

本文详细介绍了如何在MFC应用中对树控件进行递归遍历,特别是在只有一个父节点且子节点深度为两层的情况下。同时,文章还探讨了如何处理这些节点上的复选框状态,这对于实现用户交互和数据管理至关重要。
摘要由CSDN通过智能技术生成
//遍历树控件(只有一个父节点,命名为“所有模板”)
void CCheckOverLapDlg::TraverseTree(CTreeCtrl* pTreeCtrl)
{
	CString strParent = _T("所有模板");
	//主函数入口
	TraverseTreeBranch(pTreeCtrl, pTreeCtrl->GetRootItem(), TVI_ROOT, strParent, 1);
}

void CCheckOverLapDlg::TraverseTreeBranch(CTreeCtrl* pTreeCtrl, HTREEITEM hItem, HTREEITEM hParentItem, CString strParent, int iGrade)
{
	// Do stuff with hItem here
	//判断该节点是否处于选中状态
	BOOL bSelected = m_wndTreeCtrl.GetCheck(hItem);
	//获取当前节点的文本信息
	CString strCurrent = m_wndTreeCtrl.GetItemText(hItem);
	//获取其子节点
	HTREEITEM hItemTmp = pTreeCtrl->GetChildItem(hItem);
	//如果没有子节点了(即最深层节点),并且有文本信息,且处于选中状态
	if (hItemTmp == NULL && strCurrent != (_T("")) && strParent != _T("所有模板") && bSelected)
	{
		// Do stuff with hItem here,此处根据你的需求来修改
		//获取当前节点与父节点的文本信息,存起来,
		m_mapSelectedItem.insert(pair<CString, CString>(strParent, strCurrent));
		//从该树控制中删除此节点
		m_wndTreeCtrl.DeleteItem(hItem);
	}
	while (hItemTmp != NULL)
	{
		//一级子节点
		if (iGrade == 1)
			TraverseTreeBranch(pTreeCtrl, hItemTmp, TVI_ROOT, strCurrent, 2);
		//二级子节点
		else if (iGrade == 2)
			TraverseTreeBranch(pTreeCtrl, hItemTmp, TVI_ROOT, strCurrent, 3);
		//获取当前节点的子节点
		hItemTmp = m_wndTreeCtrl.GetNextSiblingItem(hItemTmp);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值