W
Der Link hat mir schonmal sehr viel geholfen. Vielen Dank!
Ich habe jetzt 2 unabhängige Frame-Windows (von CFrameWnd) in denen je eine Ansicht (jewils abgeleitet von CView) eingebettet ist. Es funktioniert alles wirklich wunderbar, bis auf zwei Phänomene, hinter die ich ums Verrecken nicht komme.
1. Ist eines der Frame-Windows sichtbar (eingeblendet), wird beim Beenden der Anwendung nicht mehr gefragt, ob die Datei gespeichert werden soll. Das übernimmt meines Wissens die Funktion CDocument::SaveModified(), die bei Beendigung der Anwendung vom Frame-Work aufgerufen werden sollte. Ist keines der Frame-Windows eingeblendet, wird auch schön brav gefragt. Was ist da los?
2. Die schlimmere Sache ist, daß es beim Speichern eines Dokuments (Aufruf aller entsprechenden Serialize()-Funktionen, begonnen bei der von CDocument, initiiert vom Frame-Work) davon abhängt, ob gerade ein Frame-Window eingeblendet ist oder nicht. Wenn ich nach dem Speichern des Dokuments versuche, die Datei wieder zu öffnen (ebanfalls Aufruf aller Serialize-Funktionen) klappt das nur, wenn die Frame-Windows genauso eingeblendet sind, wie sie es beim Speichern waren. Wenn also beim Speichern kein Frame-Window eingelblentet war, darf das beim anschließenden Öffnen auch nicht der Fall sein. Die Anwendung reagiert sonst mit der Fehlermeldung "Unerwartets Dateiformat".
Ich weiß nicht wie das geregelt bekomme. Hat einer vielleicht mal ähnliche Erfahrungen gemacht?
Noch ein paar Worte zur Erstellung der Frame-Windows. In der Rahmenklasse CMainFrame erzeuge ich die beiden Frame-Windows (bei mir jeweils von der Klasse CExtFrame, abgeleitet von CFrameWnd). Die Erzeugung geschieht auf je einen Menübefehl, wenn die eingebettete Ansicht also eingeblendet werden soll. Während des Erzeugens des Frames, wird auch die Ansicht (bei mir CZoomView bzw. CInterfaceView jeweils abgeleitet von CScrollView) mit einer Entsprechenden Funktion erzeugt.
Anschließend wird jede Ansicht mit CDocument::AddView(...) in die Liste der Ansichten des Dokuments aufgenommen. Wird das Frame-Window geschlossen, wird die Ansicht aus dem Dokument mit CDocument::RemoveView(...) wieder entfernt und das Frame-Window zerstört.
Und hier könnte das Problem liegen. CDocument speichert möglicherweise implizit irgendwelche Informationen über seine aktuell in der Ansichtsliste geführten Ansichten bei Aufruf von CDocument::Serialize() durch das Frame-Work. Ich hab nur leider überhaupt keine Ahnung, wie man da eingreifen kann, falls denn das überhaupt das Problem ist.
Danke für jeden Tip.
WOODZ