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

翻译|其它|编辑:郝浩|2005-11-02 09:29:00.000|阅读 1334 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>


 
下载本文示例代码

本人,在去年已经发表一篇关于使用数据库内记录的内容,来创建树控件的节点的文章--《按数据库记录构建树控件》(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;
}

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


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP