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类,依次读取文件夹下的子文件夹和文件,并判断通过判断是文件夹还是文件来决定递归遍历.递归遍历代码如下: /******************* ...
随机推荐
- Z字头:逐浪字库入选微软全球主流字体厂商列表
北京时间2019年6月20日消息: 来自中国的字库厂商--逐浪,成功获得全球软件巨擎.电子出版与数字印刷权威平台-微软的认证,成为获此国际认证的首家字体厂商. 微软公司为了更好的规范国际字库与出版,制 ...
- web架构之Nginx简介(1)
目录 1.Nginx概述 2.Nginx快速安装 2.1.源码方式安装Nginx 2.2.yum方式安装Nginx 3.Nginx配置文件 4.Nginx核心功能模块 5.Ningx目录介绍 1.Ng ...
- python http代理支持 https
首先需要2个软件来抓包. fiddler : http 代理软件可以分析,抓包,重放. wireshark : 全能抓包分析软件. RFC 提供了非常好的设计描述. https://tools.iet ...
- 用libvlc 抓取解码后的帧数据
vlc是一套优秀的开源媒体库,其特点是提供了完整的流媒体框架, 用它可以非常方便的实现抓取解码帧的功能. 与此功能有关的关键API为 libvlc_video_set_callbacks /*设置回调 ...
- burpsuit之Spider、Scanner、Intruder模块
1.spider模块 1.spider模块介绍 被动爬网:(被动爬网获得的链接是手动爬网的时候返回页面的信息中分析发现超链接) 对于爬网的时候遇到HTML表单如何操作: 需要表单身份认证时如何操作(默 ...
- ASP.net MVC 构建layui管理后台(整体效果)
登录页: 首页 模块管理 角色管理,角色分配 用户管理
- IDEA启动项目报错:Cannot open URL.Please check this URL is correct
IDEA启动项目报错:Cannot open URL.Please check this URL is correct 问题:IDEA启动SSM项目,使用的Tomcat,报错 Cannot open ...
- 从原子类和Unsafe来理解Java内存模型,AtomicInteger的incrementAndGet方法源码介绍,valueOffset偏移量的理解
众所周知,i++分为三步: 1. 读取i的值 2. 计算i+1 3. 将计算出i+1赋给i 可以使用锁来保持操作的原子性和变量可见性,用volatile保持值的可见性和操作顺序性: 从一个小例子引发的 ...
- SpringBoot2整合Redis多数据源
配置文件属性 spring: redis: database: 1 host: 192.168.50.144 port: 6379 password: timeout: 600 #Springboot ...
- Mol Cell Proteomics. | 粪便微生物蛋白质的组成与饮食诱导肥胖倾向的关联研究
题目:Associations of the Fecal Microbial Proteome Composition and Proneness to Diet-induced Obesity 期刊 ...