我需要保持动态添加的 CTreeCtrl 项
Serialize确实是应该做的吧? 如果是,则只需要转换如何变量类型
如果不行怎么办?
序列化函数
if (ar.IsStoring())
{
ar >> m_tree1;
}
else
{
ar << m_tree1;
}
最佳答案
序列化一棵树并不那么复杂。这是一个带有一些伪代码且没有错误检查的函数。
您唯一需要做的就是序列化节点数据...
此代码未针对编译器进行检查,但应说明如何实现此目的。代码已记录。
...
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);
}
}
}
关于c++ - CTreeCtrl 保存运行时添加的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47279309/