我使用的是MFC SDI创建了一个工程,程序运行后会有多个不同的view,我想让不同的view对应不同的document,每次只显示一个view,比如我进入画图界面,对应的是画图的document,进入编辑文件的界面,对应的是文字的document!请问该如何实现?请好心人帮帮忙!

解决方案 »

  1.   

    重载框架类的OnCreateClient函数,用CreateView创建各个视图,第1个ID为AFX_IDW_PANE_FIRST,后面依次加1,不调用CFrameWnd::OnCreateClient,直接返回TRUE。用ShowWindow控制只显示其中一个视图,并用SetDlgCtrlID将新显示的视图与原本显示的视图对调ID,确保显示的视图ID为AFX_IDW_PANE_FIRST。
      

  2.   

    数据的处理可以放在一个document中
      

  3.   

    请问如果我不想放到一个document里,每个view都有自己的document,那该如何操作?还要在创建一个document template吗?
    CSingleDocTemplate* pDocTemplate;
        pDocTemplate = new CSingleDocTemplate(
            IDR_MAINFRAME,
            RUNTIME_CLASS(CDoc),
            RUNTIME_CLASS(CMainFrame),       // main SDI frame window
            RUNTIME_CLASS(CView));
        if (!pDocTemplate)
            return FALSE;
        AddDocTemplate(pDocTemplate);
     
         pDocTemplate2 = new CSingleDocTemplate(
             IDR_MAINFRAME,
             RUNTIME_CLASS(CDoc),
             RUNTIME_CLASS(CMainFrame),       // main SDI frame window
             RUNTIME_CLASS(CView));
         if (!m_pPhoneContacts)
             return FALSE;
         AddDocTemplate(pDocTemplate2);
    在SDI里是不是不能这样做?深入浅出MFC里讲SDI可以支持多种数据类型,也就是多个documents,这要怎么操作才行?
    请好心人继续指导!
      

  4.   

    请问怎么动态创建文档,能不能说的再具体点,如何进行文档视图挂载?他们挂载要这样吗?
    pDocTemplate = new CSingleDocTemplate(
            IDR_MAINFRAME,
            RUNTIME_CLASS(CDoc),
            RUNTIME_CLASS(CMainFrame),      // main SDI frame window
            RUNTIME_CLASS(CView));
        if (!pDocTemplate)
            return FALSE;
        AddDocTemplate(pDocTemplate); 
      

  5.   

    我的问题再重述一下:SDI里有多个view,每次显示一个view,每个view对应一个doc,每次进行界面切换时操作不同的doc,该如何实现?