晕死
按照 深入浅出MFC serialize 的五个必要条件写了相应的代码save 的时候好像没有问题
用文本方式 打开时 文件内已写有内容。但是open的时候就 程序运行错误。后来,我就思考,是不是 还要重载 OnFileOpen , OnFileNew 这几个函数?请各位 前辈 指教!

解决方案 »

  1.   

    只需要在Serialize中增加代码就行,不需要重载 OnFileOpen , OnFileNew 估计是你的Load部分程序有错,设置断点跟踪一下,一般问题不大
    或者你把Serialize部分代码贴出来看看
      

  2.   

    好贴出来
    大家 帮帮忙!
    ————————————————————————————————
    class CMyDocument
    {
        CList<CGraph*,CGraph*> m_graphList;
    }void CGraph_TestDoc::Serialize(CArchive& ar)
    {
    if (ar.IsStoring())
    {
    // TODO: add storing code here

    }
    else
    {
    // TODO: add loading code here

    }
    m_graphList.Serialize( ar );
    }void CGraph::Serialize(CArchive &ar )
    {
    if( ar.IsStoring() )
    {
     ar << m_color;
     ar << m_isFirstDraw;
     ar << m_originalPoint;
    }
    else
    {
     ar >> m_color;
     ar >> m_isFirstDraw;
     ar >> m_originalPoint;
    }
    }void CLine::Serialize(CArchive &ar)
    {
    if( ar.IsStoring() )
    {
    ar << m_pointX ;
    }
    else
    {
    ar >> m_pointY ;
    }
    CGraph::Serialize( ar );
    }
      

  3.   

    你是不是需要填加一个要打开的文件啊?我也不知道是不是需要 你看看 !
       ifstream file;
       file.open("file1.txt");//这个 文件需要在当前的文件夹内.
      

  4.   

    但是open的时候就 程序运行错误。----------Open就在OnFileOpen()下做就可以了
      

  5.   

    错误隐藏在这里CList<CGraph*,CGraph*> m_graphList;
    CList串行化的实现就是针对链表中的每个对象再执行Serialize操作
    链表中保存的是CGraph*指针,所以不能直接串行化m_graphList;如果链表中保存的是CGraph对象就可以试试改成这样CList<CGraph,CGraph&> m_graphList
    或者你也可以自己用循环实现对链表中每个对象的串行化