VC树控件应用-求子树节点的集

对于点击树的某一节点后,显示当前节点的子节点的集上,是使用启动数据库的方法,造成了数据处理复杂,而且程序发应速度慢的问题;经过我再三考虑,将程序修改如下:

一、 将ReturnTreeChilds(CString strCurItem);代码修改如下://----------------提取当前所选择项的子项文本所组成的字符串------------------------
CString CTreeDataDlg::ReturnTreeChilds(HTREEITEM hP)
{
   CString text="";
   //取出当前的Item值
   text=m_ctrlTree.GetItemText(hP);
   //取子项的Item值
   HTREEITEM hC;
   hC=m_ctrlTree.GetChildItem(hP);
   while(true)
   {
     //-----------判断是否有子项,如果有,则递归调用-----------
     if (m_ctrlTree.GetChildItem(hC)!=NULL)
     { text+=(","+ReturnTreeChilds(hC));}
     else
     {text+=(","+m_ctrlTree.GetItemText(hC));}
     //----------------判断是否有兄弟项,如果有,则将它的内容添加进去---
     if (m_ctrlTree.GetNextSiblingItem(hC)==NULL)
       break;
     HTREEITEM hBC;
     hBC=m_ctrlTree.GetNextSiblingItem(hC);
     hC=hBC;
   }
   return text;
}
注:

1. 程序调用时,先将当前节点的值,将值保存到text里;

2. 由当前项的句柄,取它的子项的句柄;这时候存在有或者没有子节点的情况;

这时候,我们可以使用m_ctrlTree.GetChildItem(hC)!=NULL来判断当前这个节点有没有子节点;如果有子节点,则循环调用ReturnTreeChilds(HTREEITEM hP)函数;如果没有,则将此节点的值添加到text里。

3. 判断节点有没有兄弟节点,如果有兄弟节点,则跳至第2步,循环执行;如果没有,则跳出while循环。

4. 返回text值。

二、 将void CTreeDataDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)代码修改如下:

void CTreeDataDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
   NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
   // TODO: Add your control notification handler code here
   //--------------------------------------------------------
   hTreeCurrent=m_ctrlTree.GetSelectedItem ();
   hTreeParent=m_ctrlTree.GetParentItem(m_ctrlTree.GetSelectedItem ());
   //-------------------树型控件的图标更改---------
   m_ctrlTree.SetItemImage(hTreeCurrent,1,true );
   //----------------------------------------------  
   TreeParent=m_ctrlTree.GetItemText (hTreeParent);
   hTreeCurrent=m_ctrlTree.GetSelectedItem ();
   //---------------------处理ListTree中的相应显示内容--------------
   //-----------------获取当前的Item和子Items-----------------------
   if (m_ctrlTree.GetChildItem(hTreeCurrent)!=NULL)
   {//-------------如果,有子项则进行递归操作,返回自己和子项的值---------
     m_strEdit=ReturnTreeChilds(hTreeCurrent);  
   }
   else
   {
     m_strEdit=m_ctrlTree.GetItemText(hTreeCurrent);
   }
   UpdateData(false);//子项内容显示到Edit控件中  
   //---------------------------------------------------
   *pResult = 0;
}

这样,就可以实现点击树节点时,程序自动去搜集当前节点与子节点的值集。

时间: 2024-11-01 16:07:55

VC树控件应用-求子树节点的集的相关文章

怎么禁止树控件的刷新

问题描述 我怎么可以禁止树控件刷新?但是我又要获取到树控件点击的节点的值? 解决方案 解决方案二:可以改变一下它的单击事件,在树的TEXT改为<Ahref=#onclick="你的代码">这里</a>此节点的target值改为"#"解决方案三:引用1楼bj981的回复: 可以改变一下它的单击事件,在树的TEXT改为<Ahref=#onclick="你的代码">这里</a>此节点的target值改为&

asp .net中Ztree树控件,如何与导航栏联动,点击导航栏上的栏目,对应的树节点也要展开

问题描述 asp .net中Ztree树控件,如何与导航栏联动,点击导航栏上的栏目,对应的树节点也要展开 点击上面的栏目名称,对应的树节点也要展开 解决方案 导航和ztree什么关系..不就是调用getNodeByParam (key, value, parentNode)找到节点,然后expandNode展开节点而已.自己看api详细参数说明 解决方案二: 就是一个展开事件,在ztree官方例子有

vs2008-如何实现树控件与SqlServer2005数据库的连接,对数据库的操作可以显示在树控件上!

问题描述 如何实现树控件与SqlServer2005数据库的连接,对数据库的操作可以显示在树控件上! 建立一个对话框应用程序,托人一个树控件,通过对数据库的操作对树形控件的结点进行修改,添加的功能,利用vs2008的vc++实现! 解决方案 树控件就是得到点击的节点等,获取对应的信息,然后构造sql语句,从数据库查询对应的数据,显示到控件 解决方案二: http://download.csdn.net/detail/zhanght520/2001498

WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu

原文:WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu 一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要内容: 菜单Menu的自定义样式: 右键菜单ContextMenu的自定义样式: 树控件TreeView的自定义样式,及右键菜单实现. 二.菜单Menu的自定义样式 自定义菜单样式的效果图: Menu和Context

flex3-flex4 如何在MenuBar控件中的根节点加上icon图标

问题描述 flex4 如何在MenuBar控件中的根节点加上icon图标 能否实现上图的样子.新手求指教~~

easyui tree树控件动态插入的html代码会失去渲染?

问题描述 easyui tree树控件动态插入的html代码会失去渲染? HI, RT, 问题描述:试图通过ajax向后台发送请求,服务端返回已经拼接好的 列表(树形控件的叶子结点和子节点), 前台回调函数拿到返回值后插入到树形控件ul标签里,但是没有样式(即没有被渲染). 脚本如下: $(document).ready(function () { $.post('/test.ashx', { 'action': 'getNodes' }, function (data, textStatus)

javascript 树控件 比较好用_javascript技巧

 1.ExtJS TreePanels TreePanels 是ExtJS自身使用的树控件,它是目前最好用的树控件之一,它有诸多优点比如支持自由拖放,ExtJS本身就有非常完善的API和开发文档,但是商业项目是需要购买license的. 2.QooXdoo Tree Widget QooXdoo Tree Widget是一款OOP风格的js树控件,它支持自由扩展树控件的样式,比如做成跟文件系统一样的风格,还支持动态添加子节点.键盘导航.   3.jsTree jstree兼容多个浏览器,它有诸多

如何让vc edit控件支持输入500k的字符

问题描述 如何让vc edit控件支持输入500k的字符 如果是自绘或第三方软件的,求提供一下源码,或者帮忙解析一下原理 解决方案 看每个字符ascii码是否在那个区间.如下, if ((ch > 0 && ch < 9) || (ch > a && ch < z) || (ch > A && ch < Z)) 是字母或数字 else 不是 解决方案二: 看每个字符ascii码是否在那个区间.如下, if ((ch >

Jquery zTree 树控件异步加载操作_jquery

zTree 是利用 JQuery 的核心代码,实现一套能完成大部分常用功能的 Tree 插件 兼容 IE.FireFox.Chrome 等浏览器 在一个页面内可同时生成多个 Tree 实例 支持 JSON 数据 支持一次性静态生成 和 Ajax 异步加载 两种方式 支持多种事件响应及反馈 支持 Tree 的节点移动.编辑.删除 支持任意更换皮肤 / 个性化图标(依靠css) 支持极其灵活的 checkbox 或 radio 选择功能 简单的参数配置实现 灵活多变的功能 异步加载的意思就是: 当点