多文档(动态绑定文档和视图)

请问如何动态决定文档/视的绑定?   
    
  如何在程序运行期间根据需要启动不同的文档/视?比如,我要启动一个编辑窗口,那么我的视从CRichEditView继承,要启动一个信息浏览时,我需要启动一个从CListView继承的视。

TO:   zuohuijun(流言蜚语)     
  MFC   框架的构建顺序为:   
  1。CWinApp类在InitInstance中增加DocTemplate指定文档视图的关联,并且创建CFrameWnd的实例(这个实例一般说来是主窗口,而不是DocTemplate中指定的窗口类,当然,对于单文档的是这样的。);   
  2。在FileNew方法中DocManger创建文档的实例,以及关联的CFrameWnd类(多文档中)   
  3。CFrameWnd类在CreateClient方法中将会传入一个CCreateContext的参数,这个参数指定了当前关联的文档实例,以及视图的RUNTIME_CLASS。进而构建视图。   
    
  如果你要自己动态的切换视图,就可利用一个CCreateContext对象,添入该对象的m_pCurrentDoc的指针,以及m_pNewViewClass的View的类型(实际上是一个CRuntimeClass的指针),然后以该CCreateContext对象为参数,调用CFrameWnd::CreateView就可以了,并且该方法将返回该视图的指针(但是是个CWnd*类的指针,一般需要强制转化)。

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

vc 多文档程序中新建视图连不上文档的一个问题

分类:程序编码

//新建框架并新建视图像

切换视图方法一:

  if (m_ToolFrame != NULL)//CMainFrame
    {
        m_ToolFrame->MDIActivate();
        return;
    }//防止重复打开视图

  CChildFrame  * C_pEpipolarFrame;//定义

  

    CCreateContext context;

 

    context.m_pNewViewClass=RUNTIME_CLASS(XNewImageView); //XEpipolarImageView为视图类名称

    context.m_pCurrentDoc= this->MDIGetActive()->GetActiveDocument(); //此处直接使用(CImageMatchDoc*)this->GetActiveDocument();只会得  到空指针,本人之前犯的就是这个错误//xiaodongsaid

    if(context.m_pCurrentDoc==NULL)

        {

        ::MessageBox(this->GetSafeHwnd(),"创建框架时文档类为空","注意",MB_OK);

        }

    C_pEpipolarFrame=new CChildFrame(); //C_pEpipolarFrame为CChildFrame对象,是类成员

    C_pEpipolarFrame->LoadFrame(IDR_XNewImageView,WS_CHILD |WS_OVERLAPPEDWINDOW,this,&context); //this为CMainFrame

 

    C_pEpipolarFrame->ShowWindow(SW_SHOW);

    C_pEpipolarFrame->InitialUpdateFrame(context.m_pCurrentDoc,TRUE);  

 

切换视图方法二(参照CHKBOOK,MFC,在MSDN里面)
    CreateOrActivateFrame( pDocTemplate,
        RUNTIME_CLASS(C×××View));

切换视图方法三(先添加模板)
    pDocTemplate->OpenDocumentFile(NULL);

posted @ 2013-11-06 10:38  陳さん様  阅读(374)  评论(0编辑  收藏  举报