项目需要做一个关于目录树节点的搜索功能

先讲一下大概思路,大部分人都会从根节点一步一步地往下展开,不断地迭代搜索,但是这个方法比较麻烦,因为要不断地记录父节点,一层一层往下,有几层就要记录几个父节点。

建议树节点是通过map来存储。

当搜索到指定树节点后,打开指定树节点的父节点,发现虽然上面几层没有展开,但是最里面的是展开的。

那么就有了这么一个思路,从下往上展开。

TreeItemMap::iterator connIter = PointItemMap.begin();for (; connIter != PointItemMap.end(); connIter++){if (strcmp(connIter->second.c_str(), W2A(strId.GetBuffer())) == 0)//对比找到所需要的节点{HTREEITEM hParent = connIter->first;HTREEITEM hRoot = TreeView_GetNextItem(TreeCtrl, connIter->first, TVGN_ROOT);while (hParent!=hRoot)//如果父节点不是根节点,就继续往上展开节点。{                 hParent = TreeView_GetNextItem(TreeCtrl, hParent, TVGN_PARENT);//获取其父节点TreeCtrl.Expand(hParent, TVE_EXPAND);//展开其父节点}TreeCtrl.Select(connIter->first, TVGN_FIRSTVISIBLE);//高亮其搜索选中节点TreeCtrl.Select(connIter->first, TVGN_DROPHILITE);break;}}//TreeCtrl是树形控件

这里之后有个小问题,就是因为在高亮选中节点之后,是被固定住的,则我们搜索选中后,点击其他节点却无法取消高亮。这里可以为树形控件增加一个选择改变函数来取消固定。

void CSipClientSdkTestDlg::OnSelchangedTreeDev(NMHDR *pNMHDR, LRESULT *pResult)//选中高亮后可以点击其他节点切换其他高亮
{LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);TreeCtrl.Select(0, TVGN_DROPHILITE);//取消固定*pResult = 0;
}

或者也可以做一个清空输入栏的按钮,同时取消固定

void CSipClientSdkTestDlg::OnBnClickedButtonClear()
{GetDlgItem(IDC_EDIT)->SetWindowText(_T(""));TreeCtrl.Select(0, TVGN_DROPHILITE);
}

MFC树型控件 搜索并展开高亮指定树节点相关推荐

  1. 树型控件TreeView的几种用法

    1 基本用法 void TreeViewDataBind()         {             //首先清除树型控件内的结点             this.TreeView1.Nodes ...

  2. 强大的Js树型控件Dtree使用详解

    http://www.lmwlove.com/ac/ID868 在学习文章之前,要学会看官方网站http://destroydrop.com/javascripts/tree.从官方页面你能知道:dt ...

  3. KFC宅急送点餐系统开发 MFC动态树形控件使用

    本文写于该系统开发完成后的第二年,那时候博主大2,有一门名为<程序设计方法学>的课程,老师上课很幽默风趣,也经常给我们带来一些时事新闻.当然,课余也会给我们布置一些作业.其中"K ...

  4. VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程

    VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程 开篇语:最近在弄ocx控件发布到asp.net网站上使用,就是用户在使用过程中,自动下载安装ocx控件.(此文章也是 ...

  5. vc++树状控件(TreeCtrl)用法

    /添加树状/ HTREEITEM hItem,hChildItem; //定义树状控件的句柄 CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_TREE);/ ...

  6. android 实现控件搜索折叠效果 Animation动画折叠和普通折叠

    android 实现控件搜索折叠效果 Animation动画折叠和普通控件直接折叠效果: 原理很简单,都是获取对应的高度,通过实现高度变化而改变显示效果: 话不多说直接上代码 1.普通折叠效果,以下是 ...

  7. MFC使用mscomm控件实现plc通信

    废话不多说,直入主题! 我们的mscomm控件实现plc通信,主要分三步走: (一)mscomm控件下载,注册 (1)可以百度搜索下载mscomm控件 (2)如果觉得麻烦可以在我上传的资源处下载,地址 ...

  8. PIE SDK图层树伙伴控件示例

    1.  功能简介 TocControl控件的主要作用是显示当前加载的图层有哪些.采用什么样的符号等,目的是使用户对当前加载的数据和结构有一个总体的把握.与之相关联的伙伴控件有MapControl,Pa ...

  9. MFC动态创建控件并响应事件代码实现过程

    MFC动态创建控件以及响应动态创建的控件的事件的实现方法如下. 1.创建对象     用new进行动态创建一个对象.然后调用Create函数创建窗口,在函数的父窗口参数中传入this或者用AfxGet ...

最新文章

  1. 更新版-梳理前端开发使用eslint和prettier来检查和格式化代码问题
  2. 使用REST 端点执行反应式编程
  3. 随着互联网的深化,世间万物都将如何学会思考?
  4. 计组之中央处理器:7、指令流水线基本概念性能指标、影响因素
  5. Android笔记 codeUI与html UI
  6. CentOS7 安装的Nagios-4.2.x出现HTTP Warning/403 Forbidden 最终解决方法
  7. 长安大学微型计算机原理与接口技术答案,长安大学微机原理与接口技术AB卷试题与答案.doc...
  8. 信号卷积和图像卷积滤波
  9. 崇高文本_25个崇高的网站在2017年下载免费的图片
  10. 南京理工大学计算机学院施静,“为是这个学院的一分子而骄傲”----院友风采(2014届):南京理工大学最年轻教授 祁志祥...
  11. [CTF] SQL注入的一些经验总结(未完待续)【更新:2022.11.25】
  12. python数据函数定义的规则是什么_Python自定义函数基础概念
  13. 聚焦分布式资本:中国首家区块链基金如何布局区块链
  14. 51 nod 1625 夹克爷发红包【贪心、二进制枚举】
  15. 基于ARM核心板实现的BMS可行性方案
  16. 虚拟机概论(六)——JAVA虚拟机模型
  17. 什么是敏捷项目管理 (Agile Project Management)?
  18. 戴尔灵越7000笔记本开机吱吱响,解决办法
  19. 压缩文件密码丢了怎么办 <1>
  20. ICLR 2021 | 近期必读强化学习精选论文

热门文章

  1. 自有数据集上,如何用keras最简单训练YOLOv3目标检测
  2. 注解Annotation
  3. Ext2 常见界面界面(grid分页、窗口布局、下拉框级联)
  4. 使用grafana4的alert功能
  5. 马哥Linux2016最新高薪运维视频课程
  6. JSP学习笔记1:JSP生命周期
  7. 《前沿视点》——2013年最值得关注的网页设计流行趋势
  8. 基于WinSvr2012共享文件夹的Hyper-V实时迁移之二文件服务器及迁移用虚拟机的创建...
  9. java中的equals和hashCode
  10. GPT-J 自然语言处理 AI 模型