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

我是过客白羊

我是过客白羊

2016-01-29 12:06

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

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

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

下载本文示例代码

本人,在去年已经发表一篇关于使用数据库内记录的内容,来创建树控件的节点的文章--《按数据库记录构建树控件》(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;}
这样,就可以实现点击树节点时,程序自动去搜集当前节点与子节点的值集。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/cyuyanjiaocheng/)
展开更多 50%)
分享

猜你喜欢

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

C语言教程 C语言函数
树控件的应用 -- 求子树节点的集

树控件的双击响应

C语言教程 C语言函数
树控件的双击响应

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Activex控件的应用

设计软件 平面设计软件 广告设计软件
Activex控件的应用

MAYA基础Utility节点的应用

设计软件 平面设计软件 广告设计软件
MAYA基础Utility节点的应用

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

JQuery困惑—包装集 DOM节点

Web开发
JQuery困惑—包装集 DOM节点

植树节种什么树合适?植树节怎么种树

植树节
植树节种什么树合适?植树节怎么种树

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

CTreeCtrl类的递归使用

CTreeCtrl类的递归使用

.NET中的动态生成图像组件

.NET中的动态生成图像组件
下拉加载更多内容 ↓