SDI: Zugriff vom Dialog auf Doc oder Tree
-
Moin,
Meine Ausgangslage:
Ich habe eine SDI-Anwendung erstellt mit einem Tree- und einem ListView (Explorer-Stil). Wenn ich jetzt in den Tree klicke und dann auf einen Button in der Toolbar, wird ein nicht-modales ... oder modales... also jedenfalls ein untergeordnetes Dialogfeld aufgerufen (soll auch so untergeordnet bleiben wenn das geht).
Das Problem:
Ich möchte vom Dialogfeld aus auf eine Variable innerhalb des TreeView oder ListView zugreifen. Ich habe mir mal die Archive, FAQ, Codebeispiele usw. angeschaut, aber ich werd nicht so recht schlau draus.Ahja bevor ichs vergesse:
Mein Dialog wird in der Appklasse gestartet per:void CAnwendungApp::OnBtnInfo() { CInfoDialog infoDlg; infoDlg.DoModal(); }
Ich hab bereits dran gedacht, über die Dokumentklasse zu gehen, indem ich mir in der Doc-Klasse einen Zeiger auf den Tree erstellt, im Tree dann GetDocument reingeschrieben und OnInitialUpdate den pDoc->m_AnwendungTree = this gesetzt hab (etc.), was auch für den Datenaustausch zwischen den Views anstandlos geht, aber wie mach ich sowas beim Dialogfeld ?
Hoffe ihr könnt mir weiterhelfen, vielen Dank schonmal im Voraus.
-
Hi,
warum übergibst du die Variable nicht vor dem DoModal() ?
Bsp:void CAnwendungApp::OnBtnInfo() { CInfoDialog infoDlg; infoDlg.Variable = Variable; if(infoDlg.DoModal() == IDOK) { Variable = infoDlg.Variable; } }
MFG
Kai
-
Hi Kai und danke für die schnelle Antwort.
Das Problem, dass ich habe ist jetzt nur, wie finde ich - oder besser - wie findet die Variable einen Weg aus dem Tree heraus in die App ? Oder Andersrum: Wie kann ich von der App auf den Tree zugreifen ?Vielen Dank für jede Hilfe.
-
vielleicht solltest du deinen Dialog doch aus dem Document heraus öffnen. Die App-KLasse ist ja auch mehr dafür gedacht das Gesamtverhalten deiner Anwendung zu bestimmen, weniger um auf Daten des Dokumentes zuzugreifen. (Ausnahmen gibts natürlich immer)
-
Original erstellt von Challenger:
[QB]Ich hab bereits dran gedacht, über die Dokumentklasse zu gehen, indem ich mir in der Doc-Klasse einen Zeiger auf den Tree erstellt, im Tree dann GetDocument reingeschrieben und OnInitialUpdate den pDoc->m_AnwendungTree = this gesetzt hab (etc.), was auch für den Datenaustausch zwischen den Views anstandlos geht, aber wie mach ich sowas beim Dialogfeld ?
[QB]Zur Not auch mit Pointern. Vor dem DoModal übergibst du den Pointer an den Dialog und schon kann er darauf Zugreifen...
CTestDlg dlg; dlg.m_pPointer = m_pView; dlg.DoModal();
-
Jippie es funzt
Hab jetzt wie ihr gesagt habt im Dialog nen Zeiger auf den Tree gemacht, dann im Doc nen Zeiger auf den Tree, den Doc->Tree-Zeiger im Tree bei OnInitialUpdate =this gesetzt und dann vor DoModal beide Zeiger gleichgesetzt (nur für alle mit dem gleichen Problem ;)).
Danke übrigens auch für die Sache mit dem Dialog im Document initialisieren, war mir gar net bewusst, dass das auch geht. ^^
Ich weiß zwar nicht, ob das die eleganteste Lösung ist, aber sie funzt.P.S.: Geht die ganze Sache eigentlich umgekehrt zu machen ? Ich müsste dann ja im Dialog GetDocument aufrufen, aber der letzte Fehler bei mir war da immer der, dass m_pDocument nicht bekannt war (was ja auch logisch ist, aber Definition als Doc-Zeiger macht das ja auch nicht wieder weg).
Domo Arigatou und bis zum nächsten Compilerfehler
-
sry, Doppelpost
[ Dieser Beitrag wurde am 15.02.2003 um 10:28 Uhr von Challenger editiert. ]