Erstelltes 2. FrameWindow in einer SDI Anwendung beenden, wie?
-
Hallo!
Ich habe in meiner Anwendung 2 Doctemplates definiert:CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CstartDoc), RUNTIME_CLASS(CMainFrame), // Haupt-SDI-Rahmenfenster RUNTIME_CLASS(CstartView)); AddDocTemplate(pDocTemplate); CSingleDocTemplate* pFakeDocTemplate; pFakeDocTemplate = new CSingleDocTemplate( NULL, RUNTIME_CLASS(CstartDoc), RUNTIME_CLASS(CFakeFrame), RUNTIME_CLASS(CFakeHtmlView)); AddDocTemplate(pFakeDocTemplate);Das ist einfach nötig in meinem Projekt...würde zu lange dauern zu erklären, warum.
Nun wird in einem CstartView ein neues FakeFrame angelegt (ist wie gesagt nötig):
CWinApp* pApp = AfxGetApp(); // Get the correct document template CDocTemplate* pDocTemplate; POSITION pos = pApp->GetFirstDocTemplatePosition(); pDocTemplate = pApp->GetNextDocTemplate(pos); pDocTemplate = pApp->GetNextDocTemplate(pos); ASSERT(pDocTemplate); // Create the new frame CFakeFrame* pNewFrame = (CFakeFrame*)pDocTemplate->CreateNewFrame(GetDocument(), (CFrameWnd*)AfxGetMainWnd()); ASSERT(pNewFrame); // Activate the frame and set its active view pDocTemplate->InitialUpdateFrame(pNewFrame, NULL, FALSE); //pNewFrame->ShowWindow(SW_HIDE); CFakeHtmlView* pWBVw = (CFakeHtmlView*)pNewFrame->GetActiveView(); ASSERT(pWBVw);Dieses ist unsichtbar. Es wird nur benötigt, weil ein ActiveX es benötigt und nicht mit dem bestehenden Frame arbeiten kann, es braucht ein neues. (Bekannter Bug im IE-COM).
Nachdem die Arbeit im neuen Frame abgeschlossen ist (läuft alles unsichtbar, ich brauche nur das Frame um einen bestimmten Event zu bekommen) will ich nun das Frame wieder zerstören.Ich kann dazu an mein Mainframe eine Nachricht schicken, dass es es zerstören soll.
Nur wie zerstöre ich das neu erstelle FrameWnd? DestroyWindow führt zum Crash.
Und einfach versteckt weiterleben lassen bis zum Anwendungsende möchte ich auch nicht unbedingt....da verschenke ich mir zu viele Resourcen.
Also nun nur diese eine Frage:
Hat einer von euch eine Idee, wie ich das Teil aufgeräumt bekomme?Vielen Dank,
Steve
-
An der richtigen Stelle:
delete pNewFrame;
-
Leider funktioniert diese radikale Variante nicht
(Crash)
-
Dann benötigt irgendeine Klasse diesen Zeiger auf dieses Objekt noch. Welche?
-
thats da point.
Der Debugger sagt dass für den Punkt kein Code vorliegt.. d.h. spielt sich wohl in irgendner DLL ab...