我使用存放临时文件的方法来实现撤销编辑功能,
    CFile file1(_T("c:\\First.clw"),CFile::modeReadWrite|CFile::modeCreate);
CArchive ar(&file1,CArchive::store);
    Serialize(ar);保存文件是成功的。但是load的时候就没反应了。
我是这样load的
    CVCadDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
    CFile file1(_T("c:\\First.clw"),CFile::modeReadWrite|CFile::modeCreate|CFile::modeNoTruncate);
    CArchive ar(&file1,CArchive::load);
        pDoc->Serialize(ar); //调用重载的serialize
         Invalidate(FALSE);//刷新view请问这是什么原因阿?我应该怎样做才能用保存的临时文件来提换当前view中的文档?

解决方案 »

  1.   

    保存时的Serialize(ar);做了啥啊?这段程序写在哪里?读和写要保持一致
      

  2.   

    void CVCadDoc::Serialize(CArchive& ar)
    {
    m_EntityList.Serialize(ar);
    if (ar.IsStoring())
    {
    // TODO: add storing code here
    }
    else
    {
    // TODO: add loading code here
    }
        
    }
    就这么写的阿,还需要做什么工作吗?
      

  3.   

    pDoc->AddView(pViewAdd);
     pDoc->RemoveView(pViewRemove);
    -----------------------------
    其实这个问题很简单的。把原来的doc->RemoveView(pViewRemove);
    然后新在pDoc->AddView(pViewAdd);查一下msdn,看一下解释,你会更明白。
      

  4.   

    wwwllg(wwwllg) 
    能不能不新建一个view,就直接在当前view中替换?
    这个问题很难吗?
      

  5.   

    当然可以,只要注意,原来的view的处理就可以了。
      

  6.   

    如果,把当前view换掉
    doc->RemoveView(view);
    view->DestoryWindow();
    doc->AddView(pViewAdd);
      

  7.   

    当然,要处理,当前view的位置,如果创建区不变化,则不需要其他工作。
    否则还要处理,父窗口的onsize.
      

  8.   

    原来是我拉了一个ar.m_pDocument = GetDocument();