代码如下:
其中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());}
请指点谢谢!
其中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());}
请指点谢谢!
解决方案 »
- VS2010中 怎么使用windows的SEH?
- 同一个程序在不同的系统上进程ID一样吗?
- 请教软件皮肤界面实现的大体思路
- 请问如何在工具栏里包含一些编辑框,对话框等?
- 如何提取模块的图标,并保存为图标文件!
- 求救! 本机运行正常,在有的机器上报错:必须的资源无法得到 !!!!
- 高分寻多边形“三角剖分”的算法代码
- win32控制台程序,如何进行调试?
- 如何给一个CFrameWnd加滚动条
- 怎样在photoshop中导入VC 图象处理程序?在VC编程中怎么实现?
- (散分)DirectShow编程,socket发送视频数据,接收端怎么显示
- [Help]如何编写WindowsService程序和发布?
GetNextSiblingItem
HTREEITEM hPre=m_Tree.GetPrevSiblingItem(hItem);
while(hPre)
{
hPre=m_TreeOEM.GetPrevSiblingItem(hPre);
}
HTREEITEM hNxt=m_Tree.GetNextSiblingItem(hItem);
while(hNxt)
{
hNxt=m_TreeOEM.GetNextSiblingItem(hNxt);
}