Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CTreeCtrl保存运行时添加的项目_C++_Serialization_Mfc_Treeview - Fatal编程技术网

C++ CTreeCtrl保存运行时添加的项目

C++ CTreeCtrl保存运行时添加的项目,c++,serialization,mfc,treeview,C++,Serialization,Mfc,Treeview,我需要动态添加CTreeCtrl项 序列化确实是应该做的吗? 只有在“是”时才需要转换变量类型 如果没有,怎么做 序列化函数 if (ar.IsStoring()) { ar >> m_tree1; } else { ar << m_tree1; } if(ar.IsStoring()) { ar>>m_树1; } 其他的 { 序列化一棵树并没有那么复杂。这里是一个带有一些伪代码并且没有错误检查的函数 唯一需要做的就是序列化节点数据 这段代码没有针对编译

我需要动态添加CTreeCtrl项

序列化确实是应该做的吗? 只有在“是”时才需要转换变量类型

如果没有,怎么做

序列化函数

if (ar.IsStoring())
{
    ar >> m_tree1;
}
else
{
    ar << m_tree1;
}
if(ar.IsStoring())
{
ar>>m_树1;
}
其他的
{

序列化一棵树并没有那么复杂。这里是一个带有一些伪代码并且没有错误检查的函数

唯一需要做的就是序列化节点数据

这段代码没有针对编译器进行检查,但应该说明如何实现这一点。代码是有文档记录的

...
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);
    }
  }
}       
。。。
序列化树(m_tree.GetRootItem(),ar);
...
void序列化树(CTreeCtrl&tree、HTREEITEM-hItem、CArchive&ar)
{
如果ar.IsStoring())
{
//计算此级别上的项目数
DWORD dwCnt=0;
对于(HTREEITEM hNext=hItem;hNext;hNext=tree.GetNextItem)(hNext,TVGN_NEXT)
++dwCnt;
//在此级别上输出数据
ar>dwCnt;
while(dwCnt--)
{
//插入新节点
HTREEITEM hNext=tree.InsertItem(_T(“”),hItem?hItem:TVI_ROOT,TVI_LAST);
//将节点的数据读入新节点hNext
ReadDataOfNode(树、hNext、ar);
//现在读所有的孩子
序列化树(tree,hNext,ar);
}
}
}       

序列化树没有那么复杂。这里是一个带有伪代码且无错误检查的函数

唯一需要做的就是序列化节点数据

这段代码没有针对编译器进行检查,但应该说明如何实现这一点。代码是有文档记录的

...
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);
    }
  }
}       
。。。
序列化树(m_tree.GetRootItem(),ar);
...
void序列化树(CTreeCtrl&tree、HTREEITEM-hItem、CArchive&ar)
{
如果ar.IsStoring())
{
//计算此级别上的项目数
DWORD dwCnt=0;
对于(HTREEITEM hNext=hItem;hNext;hNext=tree.GetNextItem)(hNext,TVGN_NEXT)
++dwCnt;
//在此级别上输出数据
ar>dwCnt;
while(dwCnt--)
{
//插入新节点
HTREEITEM hNext=tree.InsertItem(_T(“”),hItem?hItem:TVI_ROOT,TVI_LAST);
//将节点的数据读入新节点hNext
ReadDataOfNode(树、hNext、ar);
//现在读所有的孩子
序列化树(tree,hNext,ar);
}
}
}       

您需要自己编写,CTreeCtrl无法自动保存其内容。请尝试修复问题的语法。不清楚“如果是,则只需转换变量类型”的含义我想如果你需要从AR转换到cTreCtrl控件是显示数据的容器。你需要存档里面的数据……把你的问题标记为C++。将正确地显示代码。你需要自己编写这个文件,cTreCtl不能自动保存它的内容。请尝试修正你的问题的语法。如果你需要从AR转换为cTreCtLL,那么控制是容器的数据,你需要把里面的数据存档……把你的问题标记为C++。