2017-11-14 8 views
0

私はCTreeCtrlアイテムを動的に追加しておく必要がありますCTreeCtrlは実行時にアイテムを追加します

シリアル化は本当にそれを行う必要がありますか? 場合のみ変換する必要がありますどのように変数のタイプ

どうすればいいですか?ツリーをシリアル化

のSerialize関数は

if (ar.IsStoring()) 
{ 
    ar >> m_tree1; 
} 
else 
{ 
    ar << m_tree1; 
} 
+0

これを自分で書く必要があります。CTreeCtrlは自動的にコンテンツを保存できません。 –

+0

質問の文法を修正してください。 "もしそうならば、どのように変数の型を変換する必要がありますか"という意味は明確ではありません – xMRi

+0

arからCTreeCtrlに変換する必要があると思ったら – silver

答えて

2

として複雑ではありません。ここでは、いくつかの擬似コードがあり、エラーが発生しない関数です。

あなたがしなければならない唯一のことは、ノードのデータをシリアル化することです...

このコードは、コンパイラに対してチェックされていないが、これを達成するためにどのような方法を示すべきです。コードは文書化されています。

... 
SerializeTree(m_tree.GetRootItem(), ar); 
... 

void SerializeTree(CTreeCtrl &tree, HTREEITEM hItem, CArchive &ar) 
{ 
    if ar.IsStoring()) 
    { 
    // Count items on this level 
    DWORD dwCnt = 0; 
    for (HTREEITEM hNext = hItem; hNext; hNext = tree.GetNextItem(hNext,TVGN_NEXT) 
     ++dwCnt; 
    // output data on this level 
    ar << dwCnt; 
    for (HTREEITEM hNext = hItem; hNext; hNext = tree.GetNextItem(hNext,TVGN_NEXT) 
    { 
     // Output data of this node 
     OutputDataOfNode(tree,hNext,ar); 
     // Stream children of this node 
     SerializeTree(tree,tree.GetChildItem(hNext),ar); 
    } 
    } 
    else 
    { 
    // Get number of nodes on this level 
    DWORD dwCnt; 
    ar >> dwCnt; 
    while (dwCnt--)   
    { 
     // Insert a new node 
     HTREEITEM hNext = tree.InsertItem(_T(""),hItem ? hItem : TVI_ROOT, TVI_LAST); 
     // Read data of node into the new node hNext 
     ReadDataOfNode(tree,hNext,ar); 
     // Now read all children 
     SerializeTree(tree,hNext,ar); 
    } 
    } 
}  
関連する問題