///////////////////////////////////////////////////////////////////////////// // CTRiASDocTemplate commands CTRiASView* CTRiASDocTemplate::SubclassView (CFrameWnd *pMainFrm, HWND hWndView) { TRACE( "FakeMFC: CTRiASDocTemplate::SubclassView\r\n"); // Document erzeugen CDocument* pDocument = CreateNewDocument(); if (pDocument == NULL) { AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC); return NULL; } ASSERT(pDocument == m_pOnlyDoc); // Frame mitteilen, daß View erzeugt/Subclassed werden muß BOOL bAutoDelete = pDocument->m_bAutoDelete; CTRiASView *pViewWnd = NULL; pDocument->m_bAutoDelete = FALSE; // don't destroy if something goes wrong pViewWnd = CreateSubclassedView (pDocument, hWndView); pDocument->m_bAutoDelete = bAutoDelete; if (NULL == pViewWnd) { AfxMessageBox (AFX_IDP_FAILED_TO_CREATE_DOC); delete pDocument; // explicit delete on error return NULL; } // Die neue View als aktive im Frame setzen pMainFrm -> SetActiveView (pViewWnd); AfxGetApp()->m_nCmdShow = DEXI_isAppWindowVisible() ? SW_SHOW : SW_HIDE; // set to default after first time InitialUpdateFrame(pMainFrm, pDocument, TRUE); return pViewWnd; }
// ============================================================================ CVMSDocTemplate::CVMSDocTemplate( UINT nIDResource, CRuntimeClass* pDocClass, CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass, CVisualMSThread *pThread) : CSingleDocTemplate(nIDResource, pDocClass, pFrameClass, pViewClass) { m_pThread = pThread; m_pOnlyDoc = CreateNewDocument(); ASSERT(m_pOnlyDoc != NULL); m_pThread->m_pMainDoc = (CVisualMSDoc*)m_pOnlyDoc; CFrameWnd *pFrame = CreateNewFrame(m_pOnlyDoc, NULL); ASSERT(pFrame != NULL); m_pThread->m_pMainWnd = pFrame; InitialUpdateFrame(pFrame, m_pOnlyDoc, FALSE); m_pOnlyDoc->OnNewDocument(); }
CDocument* CDocTemplateEx::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bMakeVisible) { CAIPIApp* pApp = (CAIPIApp*)AfxGetApp(); if (m_docList.GetCount() == 1) { CDocument* pDocument = (CDocument*)m_docList.GetHead(); BOOL e = pDocument->GetPathName().IsEmpty(); BOOL m = pDocument->IsModified(); if (lpszPathName != NULL && pDocument->GetPathName().IsEmpty() && pDocument->IsModified()) { pApp->AipiOpenDocumentFile(lpszPathName); CWaitCursor wait; if (!pDocument->OnOpenDocument(lpszPathName)) { // user has be alerted to what failed in OnOpenDocument TRACE0("CDocument::OnOpenDocument returned FALSE.\n"); return NULL; } pDocument->SetPathName(lpszPathName); POSITION pos = pDocument->GetFirstViewPosition(); CView* pView = pDocument->GetNextView(pos); CFrameWnd* pFrame = pView->GetParentFrame(); InitialUpdateFrame(pFrame, pDocument); return pDocument; } } pApp->AipiOpenDocumentFile(lpszPathName); return CMultiDocTemplate::OpenDocumentFile(lpszPathName, bMakeVisible); }
CDocument* CMyMultiDocTemplate::OpenDocumentFile(SDialingDir *psDialingDir) { CDComDoc* pDocument = (CDComDoc*)CreateNewDocument(); if (pDocument == NULL) { TRACE(traceAppMsg, 0, "CDocTemplate::CreateNewDocument returned NULL.\n"); AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC); return NULL; } ASSERT_VALID(pDocument); BOOL bAutoDelete = pDocument->m_bAutoDelete; pDocument->m_bAutoDelete = FALSE; // don't destroy if something goes wrong CFrameWnd* pFrame = CreateNewFrame(pDocument, NULL); pDocument->m_bAutoDelete = bAutoDelete; if (pFrame == NULL) { AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC); delete pDocument; // explicit delete on error return NULL; } ASSERT_VALID(pFrame); // open an existing document CWaitCursor wait; if (!pDocument->OnOpenDocument(psDialingDir)) { // user has be alerted to what failed in OnOpenDocument TRACE(traceAppMsg, 0, "CDocument::OnOpenDocument returned FALSE.\n"); pFrame->DestroyWindow(); return NULL; } InitialUpdateFrame(pFrame, pDocument, TRUE); return pDocument; }
CDocument* CSingleDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bMakeVisible) // if lpszPathName == NULL => create new file of this type { CDocument* pDocument = NULL; CFrameWnd* pFrame = NULL; BOOL bCreated = FALSE; // => doc and frame created BOOL bWasModified = FALSE; if (m_pOnlyDoc != NULL) { // already have a document - reinit it pDocument = m_pOnlyDoc; if (!pDocument->SaveModified()) return NULL; // leave the original one pFrame = (CFrameWnd*)AfxGetMainWnd(); ASSERT(pFrame != NULL); ASSERT(pFrame->IsKindOf(RUNTIME_CLASS(CFrameWnd))); ASSERT_VALID(pFrame); } else { // create a new document pDocument = CreateNewDocument(); ASSERT(pFrame == NULL); // will be created below bCreated = TRUE; } if (pDocument == NULL) { AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC); return NULL; } ASSERT(pDocument == m_pOnlyDoc); if (pFrame == NULL) { ASSERT(bCreated); // create frame - set as main document frame BOOL bAutoDelete = pDocument->m_bAutoDelete; pDocument->m_bAutoDelete = FALSE; // don't destroy if something goes wrong pFrame = CreateNewFrame(pDocument, NULL); pDocument->m_bAutoDelete = bAutoDelete; if (pFrame == NULL) { AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC); delete pDocument; // explicit delete on error return NULL; } } if (lpszPathName == NULL) { // create a new document SetDefaultTitle(pDocument); // avoid creating temporary compound file when starting up invisible if (!bMakeVisible) pDocument->m_bEmbedded = TRUE; if (!pDocument->OnNewDocument()) { // user has been alerted to what failed in OnNewDocument TRACE0("CDocument::OnNewDocument returned FALSE.\n"); if (bCreated) pFrame->DestroyWindow(); // will destroy document return NULL; } } else { BeginWaitCursor(); // open an existing document bWasModified = pDocument->IsModified(); pDocument->SetModifiedFlag(FALSE); // not dirty for open if (!pDocument->OnOpenDocument(lpszPathName)) { // user has been alerted to what failed in OnOpenDocument TRACE0("CDocument::OnOpenDocument returned FALSE.\n"); if (bCreated) { pFrame->DestroyWindow(); // will destroy document } else if (!pDocument->IsModified()) { // original document is untouched pDocument->SetModifiedFlag(bWasModified); } else { // we corrupted the original document SetDefaultTitle(pDocument); if (!pDocument->OnNewDocument()) { TRACE0("Error: OnNewDocument failed after trying to open a document - trying to continue.\n"); // assume we can continue } } EndWaitCursor(); return NULL; // open failed } #ifdef _MAC // if the document is dirty, we must have opened a stationery pad - don't // change the pathname because we want to treat the document as untitled if (!pDocument->IsModified()) #endif pDocument->SetPathName(lpszPathName); EndWaitCursor(); } if (bCreated && AfxGetMainWnd() == NULL) { // set as main frame (InitialUpdateFrame will show the window) AfxGetThread()->m_pMainWnd = pFrame; } InitialUpdateFrame(pFrame, pDocument, bMakeVisible); return pDocument; }