首页 > 其他分享 >【MFC】树控件递归遍历

【MFC】树控件递归遍历

时间:2024-08-03 12:30:02浏览次数:15  
标签:控件 pTreeCtrl 遍历 strCurrent strParent MFC hItemTmp hItem 节点

//本树只有一个父节点,最深子节点为2级,拥有复选框
//遍历树控件(只有一个父节点,命名为“所有模板”)
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);
	}
}

标签:控件,pTreeCtrl,遍历,strCurrent,strParent,MFC,hItemTmp,hItem,节点
From: https://www.cnblogs.com/lmxwiki/p/18340306

相关文章

  • mfc用printf输出调试信息到终端cmd
    前言全局说明mfc用printf输出调试信息到终端cmd一、说明环境:Windows11家庭版23H222631.3737VS2013二、printf打印调试信息2.1设置启用控制台打印2.1.1打开解决方案(项目)--属性2.1.2配置属性->生成事件->后期生成事件->命令行->编辑在框里填入......
  • Windows图形界面(GUI)-MFC-C/C++ - 静态文本框(Static Text) - CStatic
    公开视频-> 链接点击跳转公开课程博客首页-> ​​​链接点击跳转博客主页目录静态文本框(StaticText)-CStatic基本概念成员函数示例代码静态文本框(StaticText)-CStatic基本概念静态文本框是一种用于显示文本的控件,用户不能编辑其中的文本。静态文本框......
  • java集合的三种遍历方式
    一、迭代器遍历 在遍历过程中,想删除元素可以使用迭代器遍历ps:遍历过程中不能用集合的方法进行遍历,可以用指针的remove方法进行遍历二、增强for遍历idea快捷方式集合名字.for加回车。方法的底层也是利用迭代器三、lambda表达式遍历完整格式简单格式......
  • 图的遍历及其C语言实现
    目录1.为什么需要两种遍历方法?2.深度优先搜索(DeepthFirstSearch,DFS)思想:具体过程:伪代码:时间复杂度:3.广度优先搜索(BreadthFirstSearch,BFS) 思想:具体过程: 伪代码: 时间复杂度:图示: ​编辑 C语言代码演示1.为什么需要两种遍历方法?解决不同问题:DFS适用......
  • WInform 控件大小随窗体大小等比例缩放
    winform控件自动大小usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;usingUCControl=System.Windows.Forms.Control;///<summary>///控件自动适应///使用直接继承FormAutoSize即可///示例如下:///***示例代码***:publicForm1()///***示例代......
  • QT之ui控件随窗口布局的大小而自适应大小
    QT之ui窗口自适应布局新建个工程说明,注意此处勾上Generateform根据开发电脑的系统选择套件点开widget.ui,如图鼠标随意托几个常用控件展示,如图三个控件,如图,水平布局sizePolicy策略:图中,控件的sizePolicy策略将决定上面这三个控件组在自适应成的控件组的分配策略。Fi......
  • 代码随想录day16 || 513 树左下角值,112 路径之和,116 中序后序遍历构造二叉树
    切片传递问题question:什么情况下传递切片,什么情况下传递切片指针,为什么有时候会修改原始副本,有时候又不会呢?typesli[]intfuncmain(){ slice:=[]int{1} fmt.Printf("slice:%p\n",slice) change1(slice) fmt.Println("=================================") s2:=......
  • Day16 二叉树Part4 常规递归和遍历法的综合应用(二叉树相关)
    目录任务112.路径总和思路113.路径总和II思路106.从中序与后序遍历序列构造二叉树思路105.从前序与中序遍历序列构造二叉树思路心得体会任务112.路径总和给你二叉树的根节点root和一个表示目标和的整数targetSum。判断该树中是否存在根节点到叶子节点的路径,这条路......
  • ICSTCP控件
    delphi7代码:unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls,ExtCtrls,OverbyteIcsWndControl,OverbyteIcsWSocket,OverbyteIcsWSocketS;typeTForm1=class(TForm)WSocketServer1:TWSock......
  • golang对遍历目录操作的优化
    一转眼go1.23都快发布了,时间过得真快。不过今天我们把时间倒流回三年半之前,来关注一个在go1.16引入的关于处理目录时的优化。对于go1.16的新变化,大家印象最深的可能是io包的大规模重构,但这个重构实际上还引进了一个优化,这篇文章要说的就是这个优化。本文默认Linux环境,不过这个......