程序需要一个view一直显示,其它view可以使用同一个doc.一直显示的view可以是是新建MFC工程时CVideoClientApp::InitInstance中的文档默认的view
再新建view时可以通过如下的方法来创建view就能实现一个doc多个view的功能
CView* CMDITestApp::IfViewOpen(CRuntimeClass* pNewViewClass)
{
CMDIChildWnd* pChildWnd = ((CMDIFrameWnd*)AfxGetMainWnd())->MDIGetActive();
if(pChildWnd )
CView* CMDITestApp::OpenMyView(CRuntimeClass* pNewViewClass)
{
CView* pView =IfViewOpen(pNewViewClass);
if(pView == NULL)
{
CMultiDocTemplate* pDocTemplate = new CMultiDocTemplate(
IDR_MAIN_MENU,
NULL,
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CDataInfoView));
AddDocTemplate(pDocTemplate);
CDocument* pDoc = ((CMDIFrameWnd*)AfxGetMainWnd())->MDIGetActive()-
>GetActiveDocument();
CFrameWnd * pFrameWnd = pDocTemplate->CreateNewFrame(pDoc, NULL );
pDoc->OnNewDocument();
pDocTemplate->InitialUpdateFrame(pFrameWnd, pDoc, FALSE);
pFrameWnd->ShowWindow(SW_SHOWMAXIMIZED);
}
}
CView* CMDITestApp::OpenMyView(CRuntimeClass* pNewViewClass)
{
CView* pView =IfViewOpen(pNewViewClass);
if(pView == NULL)
{
CMultiDocTemplate* pDocTemplate = new CMultiDocTemplate(
IDR_MAIN_MENU,
NULL,
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CDataInfoView));
AddDocTemplate(pDocTemplate);
CDocument* pDoc = ((CMDIFrameWnd*)AfxGetMainWnd())->MDIGetActive()-
>GetActiveDocument();
CFrameWnd * pFrameWnd = pDocTemplate->CreateNewFrame(pDoc, NULL );
pDoc->OnNewDocument();
pDocTemplate->InitialUpdateFrame(pFrameWnd, pDoc, FALSE);
pFrameWnd->ShowWindow(SW_SHOWMAXIMIZED);
}
}