VC中Tree Control的使用

VC中Tree Control的使用

 

flyfish 2010年11月29日星期一

 

下载地址 http://download.csdn.net/source/2868628

一 Tree Control的初始化

 

     HTREEITEM hTreeItemParent=NULL;

     HTREEITEM hTreeItemChild=NULL;

     CString strParentData=L"";

     CString strChildData=L"";

     for (int i=1;i<5;i++)

     {

         strParentData.Format(L"%d-Parent",i);

         hTreeItemParent=m_Tree_ctlDemo.InsertItem(strParentData);

         m_Tree_ctlDemo.SetItemData(hTreeItemParent,i);

 

         strChildData.Format(L"%d-Child",i*100);

         hTreeItemChild=m_Tree_ctlDemo.InsertItem(strChildData,hTreeItemParent);

         m_Tree_ctlDemo.SetItemData(hTreeItemChild,i*100);

     }

 

Tree Control的单击响应

 

void CTreeDemoDlg::OnNMClickTree(NMHDR *pNMHDR, LRESULT *pResult)

{

     // TODO: 在此添加控件通知处理程序代码

     CPoint    pt;

     GetCursorPos(&pt);

     m_Tree_ctlDemo.ScreenToClient(&pt);

 

     CString strAll=L"";

     UINT    nFlag = 0;

     HTREEITEM    hItem = m_Tree_ctlDemo.HitTest(pt, &nFlag);

     if( NULL != hItem )

     {   

          m_Tree_ctlDemo.SelectItem(hItem);

         CString strTemp=m_Tree_ctlDemo.GetItemText(hItem);

         DWORD nID=m_Tree_ctlDemo.GetItemData(hItem);

         strAll.Format(L"%d,%s",nID,strTemp);

        

         m_Static_strTree=strAll;

         UpdateData(FALSE);

        

 

     }

     *pResult = 0;

}

 

三只遍历根节点

void CTreeDemoDlg::OnBnClickedButtonRoot()

{

     // TODO: 在此添加控件通知处理程序代码

     HTREEITEM hTreeItemRoot=NULL;

     CString strItem=L"";

     if (hTreeItemRoot=m_Tree_ctlDemo.GetRootItem())

     {

         while (hTreeItemRoot!=NULL)

         {

              strItem=m_Tree_ctlDemo.GetItemText(hTreeItemRoot);

              AfxMessageBox(strItem);

              hTreeItemRoot=m_Tree_ctlDemo.GetNextSiblingItem(hTreeItemRoot);

         }

     }

}

四非递归遍历具有两层目录的节点

void CTreeDemoDlg::OnBnClickedButtonAll()

{

     // TODO: 在此添加控件通知处理程序代码

 

     HTREEITEM hTreeItemRoot=NULL;

     HTREEITEM hTreeItemChild=NULL;

     CString strParentItem=L"";

     CString strChildItem=L"";

     CString strParentPrompt=L"";

     CString strChildPrompt=L"";

     DWORD nParent=0;

     DWORD nChild=0;

     if (hTreeItemRoot=m_Tree_ctlDemo.GetRootItem())

     {

         while (hTreeItemRoot!=NULL)

         {

              strParentItem=m_Tree_ctlDemo.GetItemText(hTreeItemRoot);

              nParent=m_Tree_ctlDemo.GetItemData(hTreeItemRoot);

              strParentPrompt.Format(L"%d,%s",nParent,strParentItem);

              AfxMessageBox(strParentPrompt);

 

              if   (m_Tree_ctlDemo.ItemHasChildren(hTreeItemRoot))

              {

                   hTreeItemChild   =   m_Tree_ctlDemo.GetChildItem(hTreeItemRoot);

                   while   (hTreeItemChild   !=   NULL)

                   {

 

                       strChildItem=m_Tree_ctlDemo.GetItemText(hTreeItemChild);

                       nChild=m_Tree_ctlDemo.GetItemData(hTreeItemChild);

                       strChildPrompt.Format(L"%d,%s",nChild,strChildItem);

                       AfxMessageBox(strChildPrompt);

                       hTreeItemChild= m_Tree_ctlDemo.GetNextSiblingItem(hTreeItemChild);

                   }

 

              }

 

              hTreeItemRoot=m_Tree_ctlDemo.GetNextSiblingItem(hTreeItemRoot);

 

         }

     }

}

 

六递归遍历所有节点

 

void  CTreeDemoDlg::RecursiveTree(HTREEITEM   hTreeItemRoot)

{   

     HTREEITEM hTreeItemNext = NULL;

     HTREEITEM hTreeItemChild = NULL;

 

     if(hTreeItemRoot == NULL)

         return;

     AfxMessageBox(m_Tree_ctlDemo.GetItemText(hTreeItemRoot));

 

     hTreeItemChild = m_Tree_ctlDemo.GetChildItem(hTreeItemRoot);

     RecursiveTree(hTreeItemChild);

 

     hTreeItemNext=m_Tree_ctlDemo.GetNextItem(hTreeItemRoot,TVGN_NEXT);

     RecursiveTree(hTreeItemNext);

 

}

以上程序在 VC++2005 Unicode字符集下调试通过

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西笑生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值