2017-11-14 1 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); 
    } 
    } 
}  
관련 문제