拜托大家了,怎样做一个CTreeCtrl的备份? http://www.csdn.net/Expert/TopicView1.asp?id=878377RT,我有一个CTreeCtrl的实例,并且已经有树(树林)在其中保存,现在我想把这个实例保存到另外一个新的CTreeCtrl的实例中,我应该如何做呢?很着急呀,我已经有相关的帖子询问了,如果帮助我解决了问题,分全部给您 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CTestDlgDlg::SaveTreeCtrl(CStdioFile* pFile, HTREEITEM hTreeItem){ //Save SiblingItem Num CString strSiblingItemNum; int iSiblingItemNum = GetSiblingCount(hTreeItem); strSiblingItemNum.Format("%d", iSiblingItemNum); pFile->WriteString(strSiblingItemNum+"\n"); HTREEITEM hSiblingItem = hTreeItem; for (int i=0; i<iSiblingItemNum; i++) { //Get Item Text CString strItemText; TVITEM tvitem; tvitem.mask = TVIF_TEXT; tvitem.hItem = hSiblingItem; tvitem.pszText = strItemText.GetBuffer(512); tvitem.cchTextMax = 512; m_treectrl.GetItem(&tvitem); strItemText.ReleaseBuffer(); pFile->WriteString(strItemText+"\n"); //Save ChildItem Num if (m_treectrl.ItemHasChildren(hSiblingItem)) { pFile->WriteString("1\n"); SaveTreeCtrl(pFile, m_treectrl.GetChildItem(hSiblingItem)); } else { pFile->WriteString("0\n"); } hSiblingItem = m_treectrl.GetNextSiblingItem(hSiblingItem); }}void CTestDlgDlg::LoadTreeItem(CStdioFile *pFile, HTREEITEM hParentTreeItem){ CString strSiblingItem; pFile->ReadString(strSiblingItem);// int iSiblingItemNum = atoi(strSiblingItem.LockBuffer()); strSiblingItem.UnlockBuffer(); CString strSiblingItemText, strHasChild; bool bHasChild; HTREEITEM hTreeItem; for (int i=0; i<iSiblingItemNum; i++) { pFile->ReadString(strSiblingItemText);// hTreeItem = m_treectrl.InsertItem(strSiblingItemText, hParentTreeItem); pFile->ReadString(strHasChild); bHasChild = (atoi(strHasChild.LockBuffer()) == 1)?true:false; if (bHasChild) { LoadTreeItem(pFile, hTreeItem); } }}int CTestDlgDlg::GetSiblingCount(HTREEITEM hFirstChildItem){ int iSiblingNum = 1; HTREEITEM hSiblingItem = m_treectrl.GetNextSiblingItem(hFirstChildItem); while (hSiblingItem) { iSiblingNum++; hSiblingItem = m_treectrl.GetNextSiblingItem(hSiblingItem); } return iSiblingNum;}如果要 Savetry{ CStdioFile file("ABC.txt", CFile::modeWrite | CFile::modeCreate | CFile::typeText); SaveTreeCtrl(&file, m_treectrl.GetRootItem()); file.Close();}catch (CFileException *pFx){ pFx->ReportError(); pFx->Delete();}如果要 Loadtry{ CStdioFile file("ABC.txt", CFile::modeRead | CFile::typeText); m_treectrl.DeleteAllItems(); LoadTreeItem(&file, 0); file.Close();} bHasChild = (atoi(strHasChild.LockBuffer()) == 1)?true:false;下面应该加多一句strHasChild.UnlockBuffer(); 加载图片时内存泄露 怎样给控制台程序传递命令行参数呀? ftp上传程序 关于afxwin1.inl的错误 vc控制台应用程序,可以使用多线程不? 求算法练习~~ 前段时间读了些关于SOCKET的资料~~ MFC扩展DLL显示窗口在DEBUG版没有问题,但在release下有问题是怎么回事? 调试过程中遇到的一个问题,请指教!!! 请问各位看看为何我不能Check和Enable我的菜单项? 如何获取当前活动子窗口打开文档的文件名称? 》》》》》》请给我出出主意,我想配置一台电脑!!! 有什么方法可以启动和禁用网卡
{
//Save SiblingItem Num
CString strSiblingItemNum;
int iSiblingItemNum = GetSiblingCount(hTreeItem);
strSiblingItemNum.Format("%d", iSiblingItemNum);
pFile->WriteString(strSiblingItemNum+"\n");
HTREEITEM hSiblingItem = hTreeItem;
for (int i=0; i<iSiblingItemNum; i++)
{
//Get Item Text
CString strItemText;
TVITEM tvitem;
tvitem.mask = TVIF_TEXT;
tvitem.hItem = hSiblingItem;
tvitem.pszText = strItemText.GetBuffer(512);
tvitem.cchTextMax = 512;
m_treectrl.GetItem(&tvitem);
strItemText.ReleaseBuffer();
pFile->WriteString(strItemText+"\n"); //Save ChildItem Num
if (m_treectrl.ItemHasChildren(hSiblingItem))
{
pFile->WriteString("1\n");
SaveTreeCtrl(pFile, m_treectrl.GetChildItem(hSiblingItem));
}
else
{
pFile->WriteString("0\n");
}
hSiblingItem = m_treectrl.GetNextSiblingItem(hSiblingItem);
}
}void CTestDlgDlg::LoadTreeItem(CStdioFile *pFile, HTREEITEM hParentTreeItem)
{
CString strSiblingItem;
pFile->ReadString(strSiblingItem);//
int iSiblingItemNum = atoi(strSiblingItem.LockBuffer());
strSiblingItem.UnlockBuffer(); CString strSiblingItemText, strHasChild;
bool bHasChild;
HTREEITEM hTreeItem;
for (int i=0; i<iSiblingItemNum; i++)
{
pFile->ReadString(strSiblingItemText);//
hTreeItem = m_treectrl.InsertItem(strSiblingItemText, hParentTreeItem);
pFile->ReadString(strHasChild);
bHasChild = (atoi(strHasChild.LockBuffer()) == 1)?true:false;
if (bHasChild)
{
LoadTreeItem(pFile, hTreeItem);
}
}
}int CTestDlgDlg::GetSiblingCount(HTREEITEM hFirstChildItem)
{
int iSiblingNum = 1;
HTREEITEM hSiblingItem = m_treectrl.GetNextSiblingItem(hFirstChildItem);
while (hSiblingItem)
{
iSiblingNum++;
hSiblingItem = m_treectrl.GetNextSiblingItem(hSiblingItem);
}
return iSiblingNum;
}如果要 Save
try
{
CStdioFile file("ABC.txt", CFile::modeWrite | CFile::modeCreate | CFile::typeText);
SaveTreeCtrl(&file, m_treectrl.GetRootItem());
file.Close();
}
catch (CFileException *pFx)
{
pFx->ReportError();
pFx->Delete();
}如果要 Load
try
{
CStdioFile file("ABC.txt", CFile::modeRead | CFile::typeText);
m_treectrl.DeleteAllItems();
LoadTreeItem(&file, 0);
file.Close();
}
下面应该加多一句
strHasChild.UnlockBuffer();