Zugriff von MainFrame auf FormView
-
Hello again,
habe eine SDIApp, als View eine FormView mit einigen Controls.
Kurze Frage: Wie kann ich eine eigene Funktion in der FormView aus CMainFrame aufrufen?
grüssle

-
Ich bin mal so frei und schicke dich weiter ins Magazin.
-
Danke erstmal, aaaaber:
5 C...View
Den View bekommt man mit
C/C++ Code:
C...View* pView = dynamic_cast<C...View*>(((CMainFrame*)AfxGetMainWnd())->GetActiveView());
ASSERT(pView);Soweit war ich auch schon. Damit komme ich an die View, aber nicht an meine

Wenn ich jetzt C...View durch meine CMyView ersetze, kommt ein Fehler 'error C2065: 'CMyView' : nichtdeklarierter Bezeichner'.
Also Header einbinden.
Danach muckt er aber im Header von CMyView, und zwar hier:// Attribute public: CMyDoc* GetDocument();

Da hab ich doch was übersehen, gelle? Aber was???
grüssle
-
Und wie äußert dieses "muckt"?
-
CStoll schrieb:
Und wie äußert dieses "muckt"?
error C2143: Syntaxfehler : Fehlendes ';' vor '*' error C2501: 'CMyDoc' : Fehlende Speicherklasse oder Typspezifizierer error C2501: 'GetDocument' : Fehlende Speicherklasse oder Typspezifizierer
grüssle

-
Der Compiler kennt den Bezeichner "CMyDoc" nicht und kommt deshalb aus dem Tritt - vermutlich hast du noch einen Header (oder Forward-Deklaration) vergessen.
-
Stimmt, der Header der *Doc muss noch vor dem *View Header in die MainFrame.cpp.
Allerdings kommt jetzt:MainFrm.cpp(129) : warning C4541: 'dynamic_cast' für polymorphen Typ 'class CView' mit /GR- verwendet; unvorhersehbares Verhalten moeglichUnd bei Ausführung an dieser Stelle eine Exception

/GR ist doch ein Compilerschalter, oder liege ich da falsch?
grüssle

-
Ja, GR ist ein Compilerschalter - und unter "/GR-" werden einige Daten, die dynamic_cast benötigt, nicht angelegt. (umstellen kannst du das in den Projektoptionen unter C/C++ -> "C++ Language" -> "Enable Run-Time Type Information (RTTI)")
PS:
estartu schrieb:
Vom Mainframe aus kann man das AfxGetMainWnd weglassen.
-
Schwere Geburt, aber jetzt isses raus

Danke & grüssle

-
Aus einerm SDI CFormView liefert GetParentFrame das Mainframe, ansonsten AfxGetMainWindow.
BTW: Der DYNAMIC_CAST macht auch was Du möchtest, ohne RTTI.