遍历一个CTreeCtrl所有节点的程序,谢了

解决方案 »

  1.   

    //遍歷樹所有節點
    HTREEITEM hitem=NULL;
    CString str;
    hitem=tvDept.GetRootItem ( );    //取得根節點
    while(hitem){
        //str=tvDept.GetItemText (hitem);    AfxMessageBox (str);
        Traversal(hitem);
        hitem=tvDept.GetNextSiblingItem (hitem); //取得指定節點hitem的下一個兄弟節點
    }  void Traversal(HTREEITEM hitem)    //函數Traversal( )采用遞歸方法遍歷指定節點hitem的所有子節點
    {
        HTREEITEM hnext;
        CString str;
        hnext=tvDept.GetChildItem(hitem);    //取得指定節點hitem的子節點
        while(hnext){ 
            //str=tvDept.GetItemText (hnext);   AfxMessageBox (str);   此句用來調試顯示用
            Traversal(hnext);
            hnext=tvDept.GetNextSiblingItem (hnext);  //GetPrevSiblingItem( )取兄弟節點的上一節點
        }
    }
      

  2.   

    楼上的兄弟,递归我是写晕了。 :-P能不能给我一个直接一个递归函数遍历CTreeCtrl中所有树林的所有节点的代码?
      

  3.   

    You can find  tree travel programmers in the network too!
      

  4.   

    中序遍历tree,链表存储。travertree(Bitree *p)
    {
      while (p)
        travertree(p->lchild);
        printf("%c",p.data);
        travertree(p->rchild);}
      

  5.   

    你可以借鉴以下的程序段:
    //遍历树,Have checked in SearchChannelsArray。
    CStringArray SearchChannelsArray;
    HTREEITEM HhootItem;
    HhootItem=m_Tree_Channels.GetRootItem();
    BOOL bIsCheck = m_Tree_Channels.GetCheck(HhootItem);
    if(bIsCheck)
    { //get first  tree
    HTREEITEM HItem;
    HItem=m_Tree_Channels.GetNextItem(HhootItem,TVGN_CHILD);
    while(HItem!=NULL)
    {
    if(m_Tree_Channels.GetCheck(HItem))
    {
    CString str=m_Tree_Channels.GetItemText(HItem);
    str=str.Right(str.GetLength()-str.Find(":")-1);
    str=(CString)ComputerName+_T("\\Camera")+str;
    SearchChannelsArray.Add(str);
    }
    HItem=m_Tree_Channels.GetNextItem(HItem,TVGN_NEXT);
    }