程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> VC樹控件應用-求子樹節點的集

VC樹控件應用-求子樹節點的集

編輯:關於VC++

對於點擊樹的某一節點後,顯示當前節點的子節點的集上,是使用啟動數據庫的方法,造成了數據處理復雜,而且程序發應速度慢的問題;經過我再三考慮,將程序修改如下:

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

這樣,就可以實現點擊樹節點時,程序自動去搜集當前節點與子節點的值集。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved