Datenaustausch Dokument <-> View
-
Hi!
Ich hab dazu leider in den FAQ nichts gefunden, die Suche hab ich auch schon benutzt.
Im Grunde ganz einfach: Ich habe eine SDI-Anwendung und möchte in meiner von CDocument abgeleiteten Klasse auf mein CView-Objekt zugreifen. CDocument bietet mir aber keine passende Methode an, um mein CView-Objekt zu erhalten.
Wie löst man sowas??
-
void CMyDocument::DoSomethingWithView() { // Position des "ersten besten" Viewer Objektes holen // Auch im SDI sind mehrere Views pro Dokument möglich! POSITION pos = GetFirstViewPosition(); // pos ist in der normalen Document/View Hirarchie nach kompletter // Initialisierung immer gültig if(pos != NULL) { // hole den zeiger auf die View. // Achtung, dynamic_cast benötigt RTTI (Compiler Schalter) CMyView* pView = dynamic_cast<CMyView *>(GetNextView(pos)); // und nun die Member Funtion der Viewer Klasse aufrufen pView->DoAction(); } }GetFirstViewPosition() und GetNextView(..) sind die geeigneten Klassen von CDocument!
Das da oben ist übrigens ein etwas abgewandeltes Beispiel aus der MSDN Oct 2001

Ausserdem ist eigentlich folgendes das Konzept: Die Viewer Klasse greift auf die Daten des Documents zu. Und die Viewer Klasse hat immer die Möglichkeit, ihr Document mit GetDocument() zu bekommen. Denn Die View ist konzeptionell das UI, das Document sozusagen der "Datenverwalter", mit Serialize(..) etc.
Gruss, Gio
-
Schau mal hier:
http://www.codeguru.com/forum/showthread.php?s=de51a02e175259bd245eb5169fffa70f&t=276622&goto=nextnewestDa sind mal die wichtigsten Zugriffe in einem Überblick dargestellt. Auch aus anderen Klassen heraus.
-
Danke euch beiden.
Gio, dein Beispiel funktioniert wunderbar.
Ich habs mit der Datentrennung nicht so genau genommen, die meisten Daten werden bei mir in der View erzeugt bzw. verarbeitet.Nochmals Danke für die schnellen und kompetenten Antworten
