我利用MDI创建多个视图   并使这些视图链接到同一个文档上
  
但是在进行保存操作时 却无法使用CDocument: Filesave()
   调用一直出错  请问下高手 这是什么问题啊
  困扰好久了   刚做一个小项目的界面  错误好多  
   一直在排除 好苦恼  
  希望能得到 比较清晰的说明或思路

解决方案 »

  1.   

    多文档还是单文档多视图分割窗体?
    MDI还是SDI 上个代码
      

  2.   


    pDocTemplate1 = new CMultiDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CEB666Doc),
    RUNTIME_CLASS(CChildFrame),       // main SDI frame window
    RUNTIME_CLASS(CKeysetView));
    AddDocTemplate(pDocTemplate1);
    pDocTemplate2 = new CMultiDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CEB666Doc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CChView));
    AddDocTemplate(pDocTemplate2);
    pDocTemplate3 = new CMultiDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CEB666Doc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CFucView));
    AddDocTemplate(pDocTemplate3);这样建立模板   后面 
    初始化窗口
    m_bFileOpenFirst=TRUE;
    CMainFrame* pMainFrame = new CMainFrame;//CEB666
    mp_doc=new CEB666Doc;
    //mp_doc->OnNewDocument();
    mp_doc->SetTitle("HQT EB666 radio program software");
    CCreateContext context;
    context.m_pCurrentDoc=mp_doc;
    context.m_pNewViewClass=NULL;//RUNTIME_CLASS(CEB666View);
    context.m_pNewDocTemplate=NULL;//pDocTemplate;
    context.m_pLastView=NULL;
    context.m_pCurrentFrame=NULL;//pTreeFrame;
    if (!pMainFrame->LoadFrame(IDR_MAINFRAME,WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE,NULL, &context ))
    return FALSE;
    m_pMainWnd = pMainFrame;
    第一个窗口
    context.m_pCurrentDoc=mp_doc; //that's the way I avoid to create new document every time I open a new view
    context.m_pNewViewClass=RUNTIME_CLASS(CChView);
    context.m_pNewDocTemplate=pDocTemplate1;
    context.m_pLastView=(((CMainFrame *)m_pMainWnd)->GetActiveFrame() ? ((CMainFrame *)m_pMainWnd)->GetActiveFrame()->GetActiveView() : NULL);
    context.m_pCurrentFrame=((CMainFrame *)m_pMainWnd)->GetActiveFrame();
    pChFrame->LoadFrame(IDR_MAINFRAME1,WS_OVERLAPPEDWINDOW ,m_pMainWnd, &context );
    pChFrame->MoveWindow(0,0,725,500);
    pChFrame->SetWindowText(g_LoadString("IDS_CHANNEL"));
    pChFrame->InitialUpdateFrame(mp_doc,TRUE);第二个窗口
    if(pFuncFrame!=NULL)
    {
    pFuncFrame->MDIActivate();
    return;
    }
    pFuncFrame = new CChildFrame();
    CCreateContext context;
    context.m_pCurrentDoc=mp_doc; //that's the way I avoid to create new document every time I open a new view
    context.m_pNewViewClass=RUNTIME_CLASS(CFucView);
    context.m_pNewDocTemplate=pDocTemplate2;
    context.m_pLastView=(((CMainFrame *)m_pMainWnd)->GetActiveFrame() ? ((CMainFrame *)m_pMainWnd)->GetActiveFrame()->GetActiveView() : NULL);
    context.m_pCurrentFrame=((CMainFrame *)m_pMainWnd)->GetActiveFrame();
    if (!pFuncFrame->LoadFrame(IDR_MAINFRAME1,WS_OVERLAPPEDWINDOW ,m_pMainWnd, &context ))return;
    pFuncFrame->MoveWindow(20,30,695,520);
    pFuncFrame->SetWindowText(g_LoadString("IDS_FUNCTION"));
    pFuncFrame->InitialUpdateFrame(mp_doc,TRUE);
    都是链接到mp_doc  
    void CEB666Doc::OnFileSave() 
    {
    // TODO: Add your command handler code here
    if(!GetPathName().IsEmpty())
    {
    CString szTemp=g_LoadString("IDS_WARN_SAVE");
    szTemp += GetPathName();
    if(AfxGetMainWnd()->MessageBox(szTemp,g_LoadString("IDS_PROMPT"),
    MB_OKCANCEL | MB_ICONEXCLAMATION)==IDCANCEL)
    return;
    }
    CDocument::OnFileSave(); 
    }  
    烦高手 来解决下 
      

  3.   

    File :doccore.cpp
    Line:  290