我想从root开始遍历treeview中的所有item,如果发现是child item,则GetItemData。最好是非递归的方法
最好给出代码,谢谢了!

解决方案 »

  1.   

    这种一般还是用递归遍历了,一层层找,找到item就判断一下是否为child,是就GetItemData
      

  2.   


    怎么遍历?我这样对吗:
    void CBaseMemberManage::TravelTreeList(HTREEITEM hItem)
    {
       HTREEITEM hTemp;
       hTemp = m_ctrlTree.GetNextItem(hItem,TVGN_CHILD);
       if(hTemp != NULL)
       {
          TravelTreeList(hTemp);
       }   hTemp = hItem;
       while( (hTemp = m_ctrlTree.GetNextItem(hTemp,TVGN_NEXT)) != NULL )
       {
           TravelTreeList(hTemp);
       }
       if(m_ctrlTree.GetCheck(hItem) && m_ctrlTree.GetParentItem(hItem) == NULL)
       {
       DWORD dwData =  m_ctrlTree.GetItemData(hItem);
       g_MyConnection.WriteLong(m_MemberInfoVector.at(dwData).GetShopUserId());
       g_MyConnection.WriteUTF(m_MemberInfoVector.at(dwData).GetMobileTel());
       }
    }
      

  3.   

    while( (hTemp = m_ctrlTree.GetNextItem(hTemp,TVGN_NEXT)) != NULL )
    {
           if(m_ctrlTree.GetCheck(hItem) && m_ctrlTree.GetParentItem(hItem) == NULL)
           {
               DWORD dwData =  m_ctrlTree.GetItemData(hItem);
               g_MyConnection.WriteLong(m_MemberInfoVector.at(dwData).GetShopUserId());
               g_MyConnection.WriteUTF(m_MemberInfoVector.at(dwData).GetMobileTel());
           }
           TravelTreeList(hTemp);
    }
      
      

  4.   


    HTREEITEM hTemp;
       hTemp = m_ctrlTree.GetNextItem(hItem,TVGN_CHILD);
       if(hTemp != NULL)
       {
          TravelTreeList(hTemp);
       }   while( (hTemp = m_ctrlTree.GetNextItem(hTemp,TVGN_NEXT)) != NULL ) 
       { 
       if(m_ctrlTree.GetCheck(hItem) && m_ctrlTree.GetParentItem(hItem) == NULL) 
       { 
       DWORD dwData =  m_ctrlTree.GetItemData(hItem); 
       g_MyConnection.WriteLong(m_MemberInfoVector.at(dwData).GetShopUserId()); 
       g_MyConnection.WriteUTF(m_MemberInfoVector.at(dwData).GetMobileTel()); 
       } 
       TravelTreeList(hTemp); 
       } 
    这样? 发现还是有问题啊