MFC之TreeCtrl遍历所有节点

这个例子,主要是查找树上的某个节点,并展开选中它。采用来了递归方法来实现。主要用到的方法:
CTreeCtrl::GetChildItem
HTREEITEM GetChildItem( HTREEITEM hItem );
返回值:如果成功则返回该子项的句柄;否则返回NULL。


采用递归的思想,把每个遍历到的节点都当作根节点对待,然后遍历他里面的儿子节点。
儿子节点又当作根节点,这样反复,直到真正的根节点都遍历完了,整个过程就结束了。说得不清楚,看代码一目了然。
按钮代码
void CForTreeCtrlDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); vector<HTREEITEM>vecItem;
HTREEITEM root = treeCtrl.GetRootItem();
//第一层根节点
while (root != NULL) { vecItem.push_back(root);
root = treeCtrl.GetNextItem(root, TVGN_NEXT);
}
for (int q = (int)vecItem.size() - 1; q > -1; q--) {
func(vecItem[q], m_find);
} }
递归函数
void CForTreeCtrlDlg::func(HTREEITEM root,CString condition) {
CString itemText = treeCtrl.GetItemText(root);
if (itemText.Find(condition) != -1) {
treeCtrl.SelectItem(root);
treeCtrl.SetCheck(root, TRUE);
treeCtrl.Expand(root, TVM_EXPAND);
return;
}
//根节点的儿子节点
HTREEITEM A1 = treeCtrl.GetChildItem(root);
//儿子节点的兄弟节点
vector<HTREEITEM>vecItem;
while (A1 != NULL) {
vecItem.push_back(A1);
A1 = treeCtrl.GetNextItem(A1, TVGN_NEXT);
}
for (int q = (int)vecItem.size() - 1; q > -1; q--) {
CString itemText = treeCtrl.GetItemText(vecItem[q]);
if (itemText.Find(condition) != -1) {
treeCtrl.SelectItem(vecItem[q]);
treeCtrl.SetCheck(vecItem[q], TRUE);
treeCtrl.Expand(vecItem[q], TVM_EXPAND);
vecItem.clear();
return;
}
else {
//递归,儿子节点当作根节点遍历
func(vecItem[q], condition);
}
}
}
构建treeCtrl节点代码
// TODO: 在此添加额外的初始化代码
CString root[2] = { TEXT("A"),TEXT("B") }; for (int i=0;i<2;i++)
{
HTREEITEM r =treeCtrl.InsertItem(root[i], NULL); CString str;
for (int j=0;j<3;j++)
{
str.Format(TEXT("%s%d"),root[i], j + 1);
HTREEITEM j1 = treeCtrl.InsertItem(str, r); CString str1;
for (int m = 0; m < 3; m++) { str1.Format(TEXT("%s%d%d"), root[i], j + 1,m+1);
HTREEITEM m1 = treeCtrl.InsertItem(str1, j1); CString str2;
for (int q = 0; q < 3; q++) { str2.Format(TEXT("%s%d%d%d"), root[i], j + 1, m + 1,q+1);
HTREEITEM q1 = treeCtrl.InsertItem(str2, m1); CString str3;
for (int s = 0; s < 3; s++) { str3.Format(TEXT("%s%d%d%d%d"), root[i], j + 1, m + 1, q + 1,s+1);
HTREEITEM s1 = treeCtrl.InsertItem(str3, q1);
}
}
}
}
}
MFC之TreeCtrl遍历所有节点的更多相关文章
- PAT树_层序遍历叶节点、中序建树后序输出、AVL树的根、二叉树路径存在性判定、奇妙的完全二叉搜索树、最小堆路径、文件路由
03-树1. List Leaves (25) Given a tree, you are supposed to list all the leaves in the order of top do ...
- Java 用自带dom解析器遍历叶子节点内容
一.XML文件config.xml,内容如下: <?xml version="1.0" encoding="UTF-8" standalone=" ...
- childNodes遍历DOM节点树
childNodes遍历DOM节点树 var s = ""; function travel(space,node) { if(node.tagName){ s += space ...
- 遍历树节点(多层)的方法(java)
前序遍历,后序遍历,广度遍历,深度遍历,遍历一级节点.以及按钮如何响应点击事件. import java.awt.*; import java.awt.event.*; import java.uti ...
- 5月25日-js操作DOM遍历子节点
一.遍历节点 遍历子节点 children();//获取节点的所有直接子类 遍历同辈节点 next(); prev(); siblings();//所有同辈元素 *find(); 从后代元素中查找匹配 ...
- 详解SimpleXML添加_修改_删除_遍历XML节点属性
SimpleXML概述 要处理XML 文件,有两种传统的处理思路:SAX 和DOM.SAX 基于事件触发机制,对XML 文件进行一次扫描,完成要进行的处理:DOM 则将整个XML 文件构造为一棵DOM ...
- MFC之TreeCtrl控件使用经验总结
树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点.MFC中使用CTreeCtrl类来封装树形控件的各种操作.通过调用BOOL ...
- 递归遍历XML节点属性和属性值
public static XmlDocument FileMergedIntoXML(string strXmlPathPublic) { string strXmlPathPublic = str ...
- VC/MFC 下 递归遍历目录下的所有子目录及文件
在MFC下要实现文件夹的递归遍历,可用CFileFind类,依次读取文件夹下的子文件夹和文件,并判断通过判断是文件夹还是文件来决定递归遍历.递归遍历代码如下: /******************* ...
随机推荐
- JavaScript(6)--- 原型链
原型链 再上一篇有简单讲过原型:JavaScript(5)--- 面向对象 + 原型 讲原型链知识之前,先说几个重要的结论. 1.原型链就是 对象的__proto__所连接的链状结构 2.protot ...
- MyISAM 和 InnoDB
1.MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级 ...
- java面试题汇总四
第三部分 Java SE基础 3.1 java多线程 3.1.1 线程的实现方式,怎么启动线程怎么区分线程? 1.线程的实现方式: 有 4 种方式可以用来创建线程: 2.继承 Thread 类 2 ...
- vue基础回顾 router
vue-router 1. 底层原理 hash 或者h5 histroy(有兼容性) 2. 使用的时候Vue需要引入VueRouter Vue.use(VueRouter) //VueRouter 底 ...
- Linux查看目录树形结构
安装tree. yum -y install tree 查看是否安装成功 yum list installed tree 执行tree命令查看目录树形结构 tree
- Lambda表达式学习笔记
Lambda基础语法 Java8中引入了一个新的操作符" -> ",该操作符被称为箭头操作符或Lambda操作符,箭头操作符将Lambda表达式拆分成两部分: 左侧:Lamb ...
- 普通人学习rust——从零到放弃 变量、不可变量、常量
普通人学习rust--从零到放弃 变量.不可变量.常量 环境 本文章内容基于如下环境,如若出入请参考当前环境. rustc 1.42.0 (b8cedc004 2020-03-09) cargo 1. ...
- Servlet(四)----HTTP、Response、servletContent
## HTTP协议: 1.请求消息:客户端发送给服务器端的数据 * 数据格式: 1.请求行 2.请求头 3.请求空行 4.请求体 2.响应消息:服务器端发送给客户端的数据 * 数据格式: ...
- 快速排序-无序数组K小元素
13:07:382020-03-10 11:16:13 问题描述: 找到一个无序数组中第K小的数 样例 1: 输入: [3, 4, 1, 2, 5], k = 3 输出: 3 样例 2: 输入: [1 ...
- Building Applications with Force.com and VisualForce(Dev401)(十):Designing Applications for Multiple Users: Building Business Processes that You Want
Dev401-011: Building Business Processes that You Want Course Objectives1.Describe the capabilities o ...