多文档(动态绑定文档和视图)
请问如何动态决定文档/视的绑定?
如何在程序运行期间根据需要启动不同的文档/视?比如,我要启动一个编辑窗口,那么我的视从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);