[gelöst] CDocument schliessen
-
Ich brauche die Möglichkeit, ein CDocument zu schliessen, incl. Frame u. View.
Folgender Versuch mittels delete führt zum Absturz:void CMainFrame::OnButton1(){ Ctest01Doc* pNewDoc = dynamic_cast<Ctest01Doc*>(pDocTemplate->OpenDocumentFile(0)); if (pNewDoc){ delete pNewDoc; MessageBox(_T("Hallo"),_T("Hallo"),MB_ICONERROR); } }
Die Messagebox erscheint nicht mehr.
Wie macht man es richtig?
-
Wenn Du ein Document hast, dass keinen View hat, dann kann man es normal mit delete entsorgen...
Was zeigt der Callstack.
-
Document mit View und Frame
-
Ich habe zu schenll und zu kurz geantwortet.
Wenn Du OpenDocumentFile so benutzt wird auch ein Frame erzeugt...
Das Document würde erst zersört werden (und darf erst zerstört werden), wenn der letzte Frame stirbt.
Ein Document, das keinen Frame hat, kann auch mit delete entsorgt werden.Du kannst Dir den erzeugten View/Views mit GetFirstViewPosition/GetNextView besorgen. Über den View kommst Du an das Parent (GetParentFrame), wenn Du dieses mit DestroyWindow zerstörst wird auch das Dokument entsorgt, sofern es der einzige Frame war der dieses Document benutzte...
-
Ja, vielen Dank, so gehts:
POSITION pos = pNewDoc->GetFirstViewPosition(); pNewDoc->GetNextView(pos)->GetParentFrame()->DestroyWindow();