当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 树控件的应用 -- 求子树节点的集

VC++
面试题目:猫吃老鼠问题的求解
一个最基本的有限元计算程序
简单的表达式求值
C程序移植到VC开发环境下
一个小语言的词法分析程序
A/B 向上取整的方法
马走日棋盘算法
一种随机抽题的简单算法
clone模式在平衡排序二叉树实现中的应用
递归的应用 -- 最简单分形图形实现
比较数据排序前后的查找次数
根据前序和中序序列生成二叉树
如何用CZip/CUnzip类压缩/解压缩文件
使用 random_shuffle() 算法随机化序列元素
Ceb解除打印屏蔽实战
基于SHA-256的HMAC文件校验器
模拟信息加密流程图简介
关于数据校验
浅谈利用RSA算法防止非法注册机的制作
加密它:用新的高级加密标准(AES)保持你的数据安全

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 50 ::
收藏到网摘: n/a

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

下载本文示例代码

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