SDI - Zeiger auf View
-
Ich rufe den Dialog in der View auf. Eigentlich erstelle ich aber ein CPropertySheet-Objekt und lade den Dialog als Registerseite mit AddPage(&m_MyDlg). m_MyDlg ist ein Objekt der Dialogklasse.
Wie soll ich ihn mitgeben? Ich hab leider trotzdem keinen Plan
-
hast du es mal versucht mit
CMyAppView test; test.MyFunc2();
-
Das gabs zwar schon zig mal, aber in Kurzfassung nochmal:
Membervariable in den Dialog machen
public: CMeinView* m_pMeinView;
Und dann vor dem Aufruf von DoModal setzen:
CMeinDialog dlg; dlg.m_pMeinView = this; dlg.DoModal();
-
äääähhhm Estartu ich wiederspreche ja nur ungern, bzw. nörgle. Aber es sprach niemand vom modeln sondern nur von Aufruf einer FKT, reicht da nciht was ich geschrieben hab? (s.o.)
-
Polofreak, was hab ich dir mit dem Radio und dem Auto erklärt?
Schon wieder vergessen?
siehe: http://www.c-plusplus.net/forum/viewtopic-var-t-is-103619-and-postdays-is-0-and-postorder-is-asc-and-start-is-20.htmlOkay, aber du hast recht, ich habe den dritten Teil der Erklärung unterschlagen. Das kommt davon, wenn einem der Kollege eine leckere Brötchenplatte vor die Nase parkt.
So ruft man die Funktion jetzt auf:
m_pMeinView->MyFunc2();
-
Schuldigung hase rescht! :p :p :p
-
Danke für die letzte Antwort! Hat super funktioniert.
Ich brauche jetzt auch in CMyDlg einen Zeiger bzw. Zugriff auf die View-Klasse.
Der Haken:
m_pDlg = new CMyDlg;
erfolgt in MainFrm (nicht-modaler Dialog).
Geht das überhaupt bei einem nicht-modalen Dialog?
LG
Philipp
-
Na klar geht das.
Einfach vor Create den Zeiger setzen.
-
estartu_de schrieb:
Na klar geht das.
Auch wenn der Dialog im MainFrame erzeugt wird?
Vor Create() funktioniert
m_pDlg->m_pMyAppView = this;
nicht:
error C2440: '=': 'CMainFrame *const ' kann nicht in 'CMyAppView *' konvertiert werden
This zeigt ja auf den MainFrame und nicht auf die View?!
-
Dann brauchst du GetActiveView und noch einen dynamic_cast (RTTI anmachen).
-
Edit:
Hab den Artikel in der MSDN gefunden: /GR (Laufzeit-Typeninformation aktivieren)
-
RTTI == RunTimeTypeInformation (oder so ähnlich)
mit den Infos weiß eine Klasse zur Laufzeit, welche Klasse sie ist und in was sie sich casten läßt.
Damit funktioniert ein cast von CView in CDeinView - aber nicht in CDeinDoc, das gäbe NULL. Damit lassen sich tolle Sachen basteln und böse Fehler vermeiden.Schau mal in Projekteinstellungen -> C++ -> Programmiersprache C++ -> Häkchen bei RTTI machen.