代码如下:
其中cTreeCtrl是另外一棵树对应的对象,要拷贝到现在一棵对应的对象是m_cTreeCtrl
以上两个对象是都是类CTreeCtrlvoid GisEMap::InitEmapTree()
{
m_cTreeCtrl.SetImageList(cTreeCtrl.GetImageList(TVSIL_NORMAL),TVSIL_NORMAL);
int itemCount = (int)cTreeCtrl.GetCount();
CString str= "";
str.Format("%d",itemCount);
GisLog::Write_GisLog("cTreeCtrl count=>"+str);
m_cTreeCtrl.DeleteAllItems();
//cTreeCtrl
CString sText;
TV_INSERTSTRUCT tvStruct;
//start insert root item
HTREEITEM hLocalTreeRootItem ;
HTREEITEM hGlolbalTreeRootItem = cTreeCtrl.GetRootItem();
tvStruct.item.hItem = hGlolbalTreeRootItem;
tvStruct.item.mask = TVIF_TEXT | TVIF_PARAM ;
cTreeCtrl.GetItem(&tvStruct.item);
sText = cTreeCtrl.GetItemText(hGlolbalTreeRootItem);
tvStruct.item.cchTextMax = sText.GetLength();
tvStruct.item.pszText = sText.LockBuffer();
tvStruct.hInsertAfter = TVI_ROOT;
tvStruct.hParent = TVI_ROOT;
hLocalTreeRootItem = m_cTreeCtrl.InsertItem(&tvStruct);
sText.ReleaseBuffer();
//end insert root item

RecursionTree(hGlolbalTreeRootItem);
if(cTreeCtrl.ItemHasChildren(hGlolbalTreeRootItem))
{
HTREEITEM hChildItem = cTreeCtrl.GetChildItem(hGlolbalTreeRootItem);
HTREEITEM hInsertItem;
while(hChildItem!=NULL)
{
tvStruct.item.hItem = hChildItem;
tvStruct.item.mask = TVIF_TEXT |TVIF_PARAM;
cTreeCtrl.GetItem(&tvStruct.item);
sText = cTreeCtrl.GetItemText(hChildItem);
tvStruct.item.cchTextMax = sText.GetLength();
tvStruct.item.pszText = sText.LockBuffer();
tvStruct.hInsertAfter = hInsertItem;
tvStruct.hParent = hLocalTreeRootItem;
hInsertItem = m_cTreeCtrl.InsertItem(&tvStruct);
sText.ReleaseBuffer();
if(cTreeCtrl.ItemHasChildren(hChildItem)){
HTREEITEM hInsertNextItem;
HTREEITEM hNextChildItem = cTreeCtrl.GetChildItem(hChildItem);
while(hNextChildItem != NULL)
{
tvStruct.item.hItem = hNextChildItem;
tvStruct.item.mask = TVIF_TEXT |TVIF_PARAM;
cTreeCtrl.GetItem(&tvStruct.item);
sText = cTreeCtrl.GetItemText(hNextChildItem);
tvStruct.item.cchTextMax = sText.GetLength();
tvStruct.item.pszText = sText.LockBuffer();
tvStruct.hInsertAfter = hInsertNextItem;
tvStruct.hParent = hChildItem;
hInsertNextItem = m_cTreeCtrl.InsertItem(&tvStruct);
sText.ReleaseBuffer();
                                        //这条代码出问题,现在的树只有二级,到最后一个结点的下一个结点,总是有值
                                       //出现了死循环
hNextChildItem = cTreeCtrl.GetNextItem(hNextChildItem, TVGN_NEXT);
}
}
hChildItem = cTreeCtrl.GetNextItem(hChildItem, TVGN_NEXT); }

}
//展开所有节点
MyExpandTree(m_cTreeCtrl.GetRootItem());}
请指点谢谢!