Zeiger von CDoc zu CView
-
Heiho
durch dieses tolle forum hier hab ich rausgefunden wie ich in der Doc klasse zugriff auf die public elemente von der View klasse bekomm
CView* pView = dynamic_cast<CView*>(((CMainFrame*)AfxGetMainWnd())->GetActiveView());die frage die sich mir stellt ist aber - wie kann ich diesen pointer in der doc klasse so bekannt machen das ich es nur einmal aufrufen braucht und jede methode es kennt ?
-
Du könntest der Doc-Klasse einen Member
CView* m_pMyView;spendieren und diesen an geeigneter Stelle füllen. Anschließend kommst du jederzeit über diesen Zeiger zu deinem View.
-
daran dachte ich auch schon, da ist aber das problem
das "CView" ist eigentlich die eigene klasse "COwnView" - n bissl bloed ausgedrueckt
der pointer zur COwnView kann ich nur bekommen wenn ich in der COwnDoc die COwnView klasse inkludier
aber ich kann diese nicht in der header von COwnDoc includieren
COwnDoc.h
// #include "OwnView.h" // error Class COwnDoc : public CDocument { COwnView *view; // error because: unknow };COwnDoc.cpp
#include "OwnView.h" // ok //global COwnView gview = ... // error COwnDoc::SomeMethod() { COwnView view = ... // ok }
-
Für sowas verwendet man üblicherweise Forward Deklarationen
(der Präprozessor ist noch dümmer als der Compiler, deshalb führen solche wechselseitigen Includes (fast?) immer zu Problemen)PS: Außerdem habe ich nicht von einer globalen Variable gesprochen, sondern von einer Membervariable der Doc-Klasse.
PPS: Und vermutlich würde ich dem Doc eher eine SetView-Methode übergeben, die das View zuweist:
class CMyView; class CMyDoc : public CDocument { ... public: //diese Methode wird von der View-Klasse aufgerufen, wenn sie aus irgendeinem Grund ein neues Objekt anlegen muß: void setView(CMyView* v) { m_pView=v; } private: CMyView* m_pView; ... };
-
Ich halte es für gar keine gute Idee einen View Zeiger im Dokument so abzulegen. Zudem gibt es das ja schon mit: GetFirstViewPosition/GetNextView!
-
also die suche hier im forum kann man wirklich wegwerfen, ich such die ganze zeit nach den bestimmten artikel wo das mit der MFC erklaert wurde - und zwar such ich die ganze zeit die moeglichkeit wie ich nen pointer zur Doc klasse bekomm, von View aus
auch wenn ich threads durchsuch find ich nie was, die suche sollte echt mal ueberarbeitet werden
-
Ehm lies mal die MSDN durch zu Doc/View oder schau dir mal deine View an. Hat ne Funktion, welche GetDocument heisst.
Die Suchfunktion in diesem Forum ist schon seit Ewigkeiten kaputt. Soll anscheinend irgendwann mal repariert werden *g*
Man kann aber auch mit Google hier suchen, muss einfach die Suche bei Google auf diese Seite einschränken.Grüssli
-
Mr Evil schrieb:
also die suche hier im forum kann man wirklich wegwerfen, ich such die ganze zeit nach den bestimmten artikel wo das mit der MFC erklaert wurde - und zwar such ich die ganze zeit die moeglichkeit wie ich nen pointer zur Doc klasse bekomm, von View aus auch wenn ich threads durchsuch find ich nie was, die suche sollte echt mal ueberarbeitet werden
Warum suchst Du im Forum und nicht in der MSDN?

Zumdem ist diese Frage en so starkes Grundlagen Wissen, dass man es im ersten Tutorial schon gesagt bekommt!
Und wenn man seine Englischkenntnisse zusammenkramt kommt man auch drauf.
- Get: Weil du etwas haben möchtest
- Document: Weil Du das Dokument möchtest
- CView: Weil es im View passiert!
:xmas1:Also CView::GetDocument
-
habs mitlerweile gefunden #gg
CFR3Doc* pDoc = dynamic_cast<CFR3Doc*>(((CMainFrame*)AfxGetMainWnd())->GetActiveDocument()); pDoc->setView(this);ans ende von create von View - und Doc nimmt den pointer an, dann hab ich stets zugriff
vielen dank CStoll {o;
-
MrEvil: Ich rate dir dringends die letzten 2 Post vor deinem letzten zu lesen ^^
Grüssli