Kleine Designfrage
-
Hallo,
ich habe eine kleine Designfrage:
Angenommen ich habe eine Dokument/Ansicht Struktur.
In einer Methode der View benutze ich nun irgendeinen Dialog, z.B. CBeispielDlg:void CIrgendwasView::Test()
{
CBeispielDlg dlg;
dlg.DoModal();
...
}In dem Dialog möchte ich nun auf das Dokument (CIrgendwasDoc) zugreifen.
In der View mache ich das ja über GetDocument().
Ich habe bisher einen Zeiger auf das Dokument an den Dialog übergeben:CBeispielDlg dlg(GetDocument());
dlg.DoModal();
...Der Dialog konnte nun direkt auf das Dokument zugreifen. Jetzt habe ich aber gehört, dass man das so nicht macht, sondern auf folgendem Wege: Der BeispielDialog holt sich einen Vater (Parent), welches ja die View ist und holt sich dann über GetDocument() das Dokument. Meine Frage: Mit welcher Methode bekomme ich den Zeiger auf den Vaterdialog (sprich die View)? Muss ich da in der View auch einen Zeiger auf dieselbe beim Konstruktoraufruf des Beispieldialogs übergeben?
Kein weltbewegendes Thema, aber währe nett, wenn Ihr mir das erklähren würdet. Ab besten mit einem kleinen Codebeispiel.
Dank Euch!
-
Jetzt habe ich aber gehört, dass man das so nicht macht, sondern auf folgendem Wege
Hat der-/diejenige das auch begründet?
-
Na ja ... nicht so richtig. Es war ein Professor an einer FH. Es sollen wohl so unnötige Membervariablen vermieden werden.
Ich persönlich finden den Weg mit der Übergabe des Dokuments besser.
Trotzdem wüßte ich gern, wie es auf dem vom Prof. beschriebenen Weg geht.
Kannst du vielleicht ein kleines Beispiel angeben?
-
Dann frag Deinen Professor, was ihm lieber ist. Entweder eine Zeigervariable mehr oder
- 2 RuntimeCheck-Abfragen, ob es sich bei dem Parent zum ersten um ein gültiges View handelt und zweitens dieses View auch ein für den Dialog gültiges Dokument besitzt
sowie
- wie der Dialog benutzt werden soll, wenn der Dialog modal ausgeführt wird (der Dialog gar keinen Parent besitzt), oder das ParentView gerade nicht sichtbar ist
-
Was der Prof sicherlich meinte betrifft ein anderes Problem:
Dialoge (zumindest modale) sollten an sich möglichst nicht das Dokument kennen.
(so sind sie für andere Dokumente wiederverwendbar).
Ein modaler Dialog stellt eine bestimmte Funktion bereit.
Am Anfang füttert man die Daten rein. Dann zeigt man den Dialog. NAch beendigung liest man die Daten aus, und schreibt sie nun z.B. ins Dokument.
Aber der Dialog sollte das nicht selbst machen!
-
Was der Prof sicherlich meinte betrifft ein anderes Problem:
Dialoge (zumindest modale) sollten an sich möglichst nicht das Dokument kennen.
(so sind sie für andere Dokumente wiederverwendbar).
Ein modaler Dialog stellt eine bestimmte Funktion bereit.
Am Anfang füttert man die Daten rein. Dann zeigt man den Dialog. NAch beendigung liest man die Daten aus, und schreibt sie nun z.B. ins Dokument.
Aber der Dialog sollte das nicht selbst machen!
-
Ja, da hast du Recht.
Aber du weißt ja, wie es ist ... manchmal sündigt man.
Totzdem danke
-
Hey, scrontch! Willst du das nicht nochmal posten? :p

-
Was der Prof sicherlich meinte betrifft ein anderes Problem:
Dialoge (zumindest modale) sollten an sich möglichst nicht das Dokument kennen.
(so sind sie für andere Dokumente wiederverwendbar).
Ein modaler Dialog stellt eine bestimmte Funktion bereit.
Am Anfang füttert man die Daten rein. Dann zeigt man den Dialog. NAch beendigung liest man die Daten aus, und schreibt sie nun z.B. ins Dokument.
Aber der Dialog sollte das nicht selbst machen!
-
Sorry, kommt von der dummen Angewohnheit immer die Back-Buttons des Browsers zu benutzen.

Der letze Beitrag war wie du dir denken kannst nicht von mir.
-
Am Anfang füttert man die Daten rein. Dann zeigt man den Dialog. NAch beendigung liest man die Daten aus, und schreibt sie nun z.B. ins Dokument. Aber der Dialog sollte das nicht selbst machen!Das funktioniert allerdings nur dann, wenn der Dialog modal angezeigt wird und man ausserhalb abfangen kann, ob der Dialog mit IDOK beendet wurde.
Bei nichtmodalen Dialogen oder PropertyPages, die einen 'Übernehmen'-Button besitzen und sich daraufhin nicht beenden, muss der Dialog die Daten an die Quelle weitergeben, so dass diese die Änderungen gleich sichtbar machen kann.Ich persönlich finde die Übernehmen-Knöpfe sehr schön, da man nicht ständig den Dialog neu aufrufen muss.