In order to use more than 1 views for a singel document, one should add another document template. If adding this snippet code to InitInstance() directly, one would encounter a dialog to select different documents although you only have one type of document. Commonly, there are 2 methods to avoid this dialog: first is to declaim different resource ID for the second document template, and blabla…; second is to add the second doucment template to other place other than the InitInstance(). See:
BOOL CPhotograph2App::OnDstTemplate()
{
pDstTemplate = new CMultiDocTemplate(IDR_Photograph2TYPE,
RUNTIME_CLASS(CPhotograph2Doc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CDstView));
if (!pDstTemplate)
return FALSE;AddDocTemplate(pDstTemplate);
ASSERT_VALID(pDstTemplate);
return TRUE;
}
Then you can create the view when necessary. Remember to InitialUpdateFrame after CreateNewFrame.
// CMainFrame message handlers
BOOL CMainFrame::OnDstWindow()
{
CMDIChildWnd* pActiveChild = MDIGetActive();
CDocument* pDocument;
if (pActiveChild == NULL ||
(pDocument = pActiveChild->GetActiveDocument()) == NULL) {
TRACE0("Warning: No active document for WindowNew command.\n");
AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
return FALSE; // command failed
}
CPhotograph2App* pApp = (CPhotograph2App*)AfxGetApp();
ASSERT_POINTER(pApp, CPhotograph2App);
//CDocTemplate* pTemplate = pDocument->GetDocTemplate();CMultiDocTemplate* pDstTemplate = pApp->GetDstTemplate();
ASSERT_VALID(pDstTemplate);
CFrameWnd* pFrame = pDstTemplate->CreateNewFrame(pDocument, pActiveChild);
if (pFrame == NULL) {
TRACE0("Warning: failed to create new frame.\n");
return FALSE; // command failed
}
pDstTemplate->InitialUpdateFrame(pFrame, pDocument);}