http://www.csdn.net/Expert/TopicView1.asp?id=878377RT,我有一个CTreeCtrl的实例,并且已经有树(树林)在其中保存,现在我想把这个实例保存到另外一个新的CTreeCtrl的实例中,我应该如何做呢?很着急呀,我已经有相关的帖子询问了,如果帮助我解决了问题,分全部给您

解决方案 »

  1.   

    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;
    }如果要 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();
    }
      

  2.   

    bHasChild = (atoi(strHasChild.LockBuffer()) == 1)?true:false;
    下面应该加多一句
    strHasChild.UnlockBuffer();