WEB开发网      婵犻潧鍊婚弲顐︽偟椤栨稓闄勯柦妯侯槸閻庤霉濠婂骸浜剧紒杈ㄥ笚閹峰懘鎮╅崹顐ゆ殸婵炴垶鎸撮崑鎾趁归悩鐑橆棄闁搞劌瀛╃粋宥夘敃閿濆柊锕傛煙鐎涙ê鐏f繝濠冨灴閹啴宕熼鍡╀紘婵炲濮惧Λ鍕叏閳哄懎绀夋繛鎴濈-楠炪垽鎮归崶褍妲婚柛銊ュ缁傚秹鏁撻敓锟� ---闂佹寧娲╅幏锟�
开发学院软件开发VC VC树控件应用-求子树节点的集 阅读

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

 2007-10-05 20:22:29 来源:WEB开发网 闂侀潧妫撮幏锟�闂佸憡鍨电换鎰版儍椤掑倵鍋撳☉娆嶄沪缂傚稄鎷�婵犫拃鍛粶闁靛洤娲ㄩ埀顒佺⊕閵囩偟绱為敓锟�闂侀潧妫撮幏锟�  闂佺ǹ绻楀▍鏇㈠极閻愬灚瀚梺鍨儏閳ь剙绉归弻銊р偓闈涙啞閻h京鈧敻鍋婇崰鏍х暦閿燂拷
核心提示:对于点击树的某一节点后,显示当前节点的子节点的集上,VC树控件应用-求子树节点的集,是使用启动数据库的方法,造成了数据处理复杂,返回自己和子项的值- m_strEdit=ReturnTreeChilds(hTreeCurrent); } else { m_strEdit=m_ctrlTree.GetItemText(h

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

一、 将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;
}

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

Tags:VC 控件 应用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接