我在显示树节点前调用DeleteAllItems清理以前的树节点,可是运行中出错了。第一次显示树节点时不出错,再点击其他窗口,然后再显示树节点时出错啦。怎么解决啊?m_tree.DeleteAllItems();//m_tree是CTREELISTCTRL类型的。我想是只是清除了CTREELISTCTRL的节点,还没有对CLISTCTRL进行处理的原因。可没有解决的办法。如果不调用m_tree.DeleteAllItems();不会运行中出错,只不过会多显示很多节点。哪位高手帮忙啊。不知我说明白没有。
。A 硬盘 (空记录) 。
。B 硬盘 (有记录) 。
........................
项目 信息
硬盘
+C 10G
+D 20G
+E 30G就是点击B时显示B硬盘信息,再点击A(显示空白,没有记录),再点击B时就出错啦。
。A 硬盘 (空记录) 。
。B 硬盘 (有记录) 。
........................
项目 信息
硬盘
+C 10G
+D 20G
+E 30G就是点击B时显示B硬盘信息,再点击A(显示空白,没有记录),再点击B时就出错啦。
解决方案 »
- 如何在网页中在不刷新页面的情况下,刷新ACTIVE控件窗口?
- 求助:在 WinObj 中看不到我的驱动对象?
- WebBrowser控件在编辑状态和DHtmlEdit控件了的区别是什么?
- 在vc.net2003中生成可执行文件,“在共享 DLL 中使用 MFC”就执行正确,“在静态库中使用 MFC”就执行错误,怎么回事??
- 这个注册表函数怎么操作啊
- VC截图方面的问题
- 数组里的上千个double型的数据怎样正确保存为*.txt文件并读出到数组里?
- 如何使用 MSXML解析XML ?
- 如何学习ATL
- 有没有华中理工大学的人呀
- ATL ActiveX如何取得在Web页面object标签中的自定义的属性,而不通过取param标签内属性值的方式?
- 基于OpenSSL 的 Ftp客户端 PASV方式SSL_connect失败的问题 在线等 留言有分 解决立即结贴
运行时出的错。m_wndOutput.Clear();
m_wndOutput.Show(ComputerID);我是每次在显示之前调用Clear();清理。m_tree.DeleteAllItems();在Clear中。然后在显示Show()我估计是内存没有清理干净。可又不知道具体是哪儿啊?有没有这方面经验的兄弟啊?
如果用m_wndHardinfo.DeleteAllItems();替换m_tree.DeleteAllItems();就不会出现运行错误(m_wndHardinfo是CLISTCTRL控件,m_tree就在此控件中),缺点是显示不对,比如A硬盘有记录,B硬盘空记录,点击完A后再点击B,B显示的和A一样,有时会出现A或b显示比预定信息多的信息。
"只不过会多显示很多节点"表示你又插入很多节点,可能是tree展开时重复了,tree展开时应该检查是否已经展开过.
void CLeftView::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CMainFrame *pMain=(CMainFrame*)AfxGetMainWnd();
// get LeftTree
CTreeCtrl& LeftTree=this->GetTreeCtrl(); TVITEM *pNew=NULL;
char tvinamenew[MAX_PATH];
pNew=&(pNMTreeView->itemNew);
if(pNew && pNew->hItem)
{
UINT ret=LeftTree.GetItemState(pNew->hItem,TVIS_EXPANDEDONCE);
if(ret & TVIS_EXPANDEDONCE)
{
return;// already
}
this->GetTreePath(pNew,tvinamenew);
if(stricmp(tvinamenew,"MY COMPUTER")==0 ||
stricmp(tvinamenew,"Control 802D")==0 )
{
return;
}
//
char DirName[MAX_PATH];
char DriveName[MAX_PATH]="";
strcpy(DirName,tvinamenew);
//
BOOL MyPC;
MyPC=pMain->CutDriveName(DirName);
BOOL dir_exist=FALSE;
CWaitCursor wait;// display wait cursor
if(!MyPC)
{// contain "Control 802D"
dir_exist=pMain->Tree802Files(DirName,pNew->hItem);
if(dir_exist==FALSE)
{ // this dir not
TVITEM tvi;
tvi.hItem=pNew->hItem;
tvi.mask=TVIF_HANDLE|TVIF_STATE|TVIF_CHILDREN;
tvi.state=0;// reset :
tvi.stateMask=TVIS_EXPANDEDONCE|TVIS_EXPANDED;
tvi.cChildren=0;
LeftTree.SetItem(&tvi);
}
}
else
{// "My Computer"
pMain->TreeFiles(DirName,pNew->hItem);
}
} *pResult = 0;
}