Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: FAQ - MFC ::  Pointer auf CDocument in Dialog & Ringinclude-Lösung     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
JoSsiF
Unregistrierter




Beitrag JoSsiF Unregistrierter 14:29:41 15.06.2005   Titel:   Pointer auf CDocument in Dialog & Ringinclude-Lösung            Zitieren

Hallo!

Hätte mal eine Frage zu meiner SDI-Anwendung.

Und zwar folgendes Problem: ich öffne aus der Doc-Klasse meiner SDI-Anwendung ein Dialogfeld (abgeleitet von CDialog).
Jetzt möchte ich aus dem Dialogfeld heraus auf eine Membervariable der Doc-Klasse zugreifen. Dazu bräuchte ich ja sicherlich einen Pointer auf diese Klasse.

Wie kann ich diesen erzeugen? Habs u.a. versucht mit GetParent(), ist aber Quatsch, weil das Dialogfeld in diesem Sinne keinen Parent besitzt ;)

Vielen Dank schonmal!

Grüße
JoSsiF


Zuletzt bearbeitet von estartu am 09:19:55 10.02.2006, insgesamt 2-mal bearbeitet
Werbeunterbrechung
TFreudi1
Unregistrierter




Beitrag TFreudi1 Unregistrierter 14:49:55 15.06.2005   Titel:              Zitieren

Was Du da genau machst habe ich zwar nicht verstanden, aber mir haben die Views immer einen Member m_pDocument der auf das Document zeigt.
Wenn Das Document in der App-Klasse definiert hast kommt man vielleicht mit AfxGetApp()->m_myDoc
dahin.
Hilft das ?

Freudi
estartu
Moderator

Benutzerprofil
Anmeldungsdatum: 05.09.2003
Beiträge: 11494
Beitrag estartu Moderator 15:11:41 15.06.2005   Titel:              Zitieren

Entweder gibst du den Zeiger vor DoModal an eine Membervariable im Dialog, oder du hangelst dich mit
C/C++ Code:
CDocument* pDoc = AfxGetMainWnd()->GetActiveDocument();
C/C++ Code:
CDocument* pDoc = AfxGetMainWnd()->GetActiveDocument();
C/C++ Code:
CDocument* pDoc = AfxGetMainWnd()->GetActiveDocument();
rüber. Dann musst du nur noch casten. :)
JoSsiF
Unregistrierter




Beitrag JoSsiF Unregistrierter 15:12:37 15.06.2005   Titel:   Pointer auf CDocument            Zitieren

Danke erstmal!

Aus der View heraus auf Doc zuzugreifen ist kein Problem - dafür bietet CView ja die Funktion GetDocument().
Über AfxGetApp() hat's leider nicht funktioniert. Ich definiere das Document auch nicht in der App. Das übernimmt ja alles der Wizard *g*

Sorry, beschäftige mich noch nicht allzu lang mit der Thematik. Wenn das bei dir gut funzt mit der AfxGetApp()-Sache, wie krieg ich dann die Definition des Documents in der App hin, ohne dass hier gleich nichts mehr funktioniert? ;)

Oder gibt's noch eine andere Möglichkeit des Zugriffs?

Vielen Dank!
JoSsiF
JoSsiF
Unregistrierter




Beitrag JoSsiF Unregistrierter 16:10:58 15.06.2005   Titel:              Zitieren

@estartu_de:
Das klingt gut! Ich hab mich mal für die 1. Variante entschieden.

Habe im Header der Dialog-Klasse die Membervariable angelegt, und diese wird im Doc initialisiert.
Da muss ich allerdings jetzt nochmal ganz dumm ranfragen: die Membervariable muss ja vom Typ meiner Doc sein (abgeleitet von CDocument). Wo muss ich nun welche Header-Datei einbinden, damit der mit dieser Klasse auch was anfangen kann? Bisher hagelt's massig Fehlermeldungen, die darauf zurückzuführen sind, dass der die Klasse nicht kennt. Habe probehalber die Header-Datei der Doc in die Header-Datei des Dialogs geschrieben - bringt aber leider nichts.

Vielen Dank für eure Hilfe und eure Geduld :)
JoSsiF
Tow-B.de
Mitglied

Benutzerprofil
Anmeldungsdatum: 19.02.2004
Beiträge: 570
Beitrag Tow-B.de Mitglied 08:43:59 16.06.2005   Titel:              Zitieren

Na wenn du im Dialog ne Membervariable vom Typ deines Doc erszeugen möchtest, musst du vorher im Dialog-Header auch deinen Doc-Header includen.

_________________
Ist es ein Wunder ?
estartu
Moderator

Benutzerprofil
Anmeldungsdatum: 05.09.2003
Beiträge: 11494
Beitrag estartu Moderator 08:50:34 16.06.2005   Titel:              Zitieren

Tow-B.de schrieb:
Na wenn du im Dialog ne Membervariable vom Typ deines Doc erszeugen möchtest, musst du vorher im Dialog-Header auch deinen Doc-Header includen.

Falsch, genau das ist ja bei ihm schief gegangen - das wird ein Ringinclude. :warning:

Sorry, ich hatte nicht daran gedacht, aber so kennst du den Fehler jetzt auch. :)

Also, im Header des Dialoges schreibst du statt
C/C++ Code:
#include "MeinDoc.h"
C/C++ Code:
#include "MeinDoc.h"
C/C++ Code:
#include "MeinDoc.h"

einfach
C/C++ Code:
class CMeinDoc;
C/C++ Code:
class CMeinDoc;
C/C++ Code:
class CMeinDoc;
das ist eine Forwarddeklaration.
Nun kannst du allerdings nur Zeiger auf die Klasse im Header verwenden.
Im Cpp kannst du dann
C/C++ Code:
#include "MeinDoc.h"
C/C++ Code:
#include "MeinDoc.h"
C/C++ Code:
#include "MeinDoc.h"
machen und ganz normal mit der Klasse arbeiten. :)
C/C++ Forum :: FAQ - MFC ::  Pointer auf CDocument in Dialog & Ringinclude-Lösung   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.