Datenaustausch Doc und Dlg
-
Also folgendes Problem.
Ich habe ein nicht modales Dialogfeld.
und will Daten nach Buttonklick im Dialog an die Dokumentenklasse eines SDI progs weitergeben. Wenn ich aber einen Pointer auf die Docklasse einrichte, bekome ich eine Fehlermeldung.
Bitte sagt mir wie ihr das Problem lösen würdet. (Dlg in InitInstance() auf dem Stack angelegt).
Und wie kann ich Die View in der Dlgklasse (buttonklick) aktualisieren a la UpdateAllViews.
Wäre cool wenn ihr mit Beispielen kommt.
-
Auf dem Stack hat der nichtmodale Dialog erstmal nichts zu suchen, da er genauso schnell wieder weg ist wie er gekommen ist.
Deinem Dialog verpasst du dann ne schöne Membervariable vom Typ Zeiger auf dein Document. Diese initialisierst du dann zum richtigen Zeitpunkt (am besten kurz nachdem du den Dialog per Create erzeugt hast).
Dann sollte es eigentlich keine Probleme mit dem Zugriff auf sämtliche öffentliche Memberfunktionen deines Documents geben.
-
Tschuldigung meinte auf dem Heap natürlich
Also CIrgendwasDoc * m_pDoc;
Aber wie muss ich sie initialisieren?
m_pDoc = CIrgendwasDoc; Geht nicht.
-
m_pDoc = this;
-
Wenn ich m_pDoc in der Dialogklasse initialisiere, bekomme ich die Fehlermeldung, dass C...Dlg nich in C...Doc umgewandelt werden kann.
Wo soll ich m_pDoc dann initialisieren in der Docklasse?
-
Original erstellt von thomas80d:
Deinem Dialog verpasst du dann ne schöne Membervariable vom Typ Zeiger auf dein Document.Bitte nochmal genau durchlesen.
-
Ich hab sie ja in der Dialogklasse erstellt aber wenn ich sie z.B.: in InitDialog initialisiere, dann kommt dieser Fehler
-
Du musst sie im Document initialisieren, vor der Erstellung des Dialoges:
m_Dlg.m_pDoc = this;
-
Ok ich steh jetzt vor folgenden Problemen:
Wenn ich den Dialog im Konstruktor der Doc Klasse erstelle, dann kann ich eigentlich den this Zeiger ganz einfch an meine m_pDoc in der Dlg Klasse übergeben.
C...Dlg * m_pDlg; m_pDlg = new C...Dlg; m_pDlg->m_pDoc = this; m_pDlg->Create(...); // usw ...
Aber wenn ich dass mache, muss ich die Dlg in die DocHeader und die Doc in die DlgHeader einbinden mit #include. Ich bekomme dann ein paar Fehlermeldungen.
obendrein ist das ein schlechter Stil, da der Dialog nicht zum Dokument gehört.Wenn ich den Dialog in der App Klasse in InitInstanze mache. Müsste ich im Doc Konstruktor über AfxGetApp()->m_pDlg->m_pDoc = this; die m_pDoc initialisieren können. Aber über AfxGetApp() kennt es meine Dlg Membervariable nicht.
Wie kann ich diese Problemchen beseitigen?