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

2016-01-29 12:06 27 1 收藏

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

【 tulaoshi.com - C语言心得技巧 】

树控件的应用 -- 求子树节点的集
作者:XuFeng Yuan

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

下载本文示例代码

本人,在去年已经发表一篇关于使用数据库内记录的内容,来创建树控件的节点的文章--《按数据库记录构建树控件》(http://www.vckbase.com/document/viewdoc.asp?id=466),
由于这篇文件里,对于点击树的某一节点后,显示当前节点的子节点的集上,是使用启动数据库的方法,造成了数据处理复杂,而且程序发应速度慢的问题;经过我再三考虑,将程序修改如下:

一、 将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;}
这样,就可以实现点击树节点时,程序自动去搜集当前节点与子节点的值集。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

来源:http://www.tulaoshi.com/n/20160129/1484628.html

延伸阅读
      受室内环境以及小花盆的影响,估计也就长这么大了,不指望开花结果的,只是一个小盆景而已,美化居室还能净化空气,同时陶冶情操,先泡水7天,每天都一定要换水,这一点很重要。柚子种子泡水后会变成果冻状的,是正常的,不用觉得奇怪,我还用白酒泡柚子种子,然后拿那些果冻状的东西涂脸,保湿效果超好的。7天后就可...
标签: Web开发
今天终于开始了EnterpriseLibrary的进程了,边看边学,在这里要感谢TerryLee前辈,看了你的文章得到了不少知识,让我更容易进入状态。由于刚刚接触到这个咚咚对他还有点陌生,无论是哪个项目配置文件肯定是我们研究的切入点,所以首先当然是要看看Enterprise Library对配置文件的一些做法。   安装EnterpriseLibrary后,VS中的...
挤压造型Extrusion的节点说明和应用实例 ---------------------------- 1。挤压造型的节点说明: Extrusion节点   Extrusion {       spine [0 0 0,0 1 0] # MFVec3f     crossSection [1 1,1 -1,-1 -1,-1 1,1 1] # MFVec2f     scale [1 1] # MF...
树视控件在多文档中的使用 作者 5icomputer 下载源代码     自从来到我们的论坛以来,认识了很多的朋友和编程的高手,从中学到了很多知识。我看在论坛中有很多人问关于树控的问题。故将树控的一些问题写出来,以供大家参考,同时也作为近一段时间来学习的总结。 &nbs...
标签: 植树节 节日
植树节起源 我国古代在清明时节就有插柳植树的传统,而近代植树节则最早由美国的内布拉斯加州发起。19世纪以前,内布拉斯加州是一片光秃秃的荒原,树木稀少,土地干燥,大风一起,黄沙漫天,人民深受其苦。1872年,美国著名农学家朱利叶斯·斯特林·莫尔顿提议在内布拉斯加州规定植树节,动员人民有计划地植树造林。当时州农业局通过决议...

经验教程

485

收藏

94
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部