Methoden Global verfügar machen?
-
Hallo!
Ich habe ein SDI. In der Klasse clKundenDaten werden die Daten gehandelt. Von dieser erstelle ich eine Instanz in der View. Also: clKundenDaten objKundenDaten.
Sobald das Programm gestartet wird, gibt es also eine Instanz zum handling der Daten.In der View gibt´s es dann verschiedene Evanthandler, die auf die Daten zugreifen, Bsps:
objKundenDaten.Adde(szName,iAlter);
objKundenDaten.Save();Und diese Save Methode will ich starten wenn ich das Programm schliesse. Ich habe also die WM_CLOSE in der Mainfrm überschrieben, nur wie kann ich jetzt auf die Save Methode zugreifen. Normal erstellt man ja eine Instanz, das würde aber nicht gehen da dann halt noch keine Daten drin sind?
MfG Ann
-
-
Hol dir doch nen Zeiger auf deine View und nimm dann die Funktion.
Schau dazu mal hier: http://www.c-plusplus.net/forum/viewtopic-var-t-is-125623.html.EDIT: Jaja, da war mal jemand wieder schneller.
Sollte den Link vielleicht auch mal als Lesezeichen anlegen. Jetzt weißt du aber, von wem ich den Link habe.
-
Paul_C. schrieb:
Sollte den Link vielleicht auch mal als Lesezeichen anlegen. Jetzt weißt du aber, von wem ich den Link habe.
Was heißt hier "auch mal"? Ich hab den auch kopieren müssen.
-
Hm, ich brauchte solange für's Eintippen.
Habe die Seiten hier ausgedruckt zur Hand.
-
Ach, abtippen.
Wow, das freut mich, wenn dir das so gefällt.
-
Ja, finde ich doch sehr hilfreich. Vor allem, da ich vorher nur mit dialogfeldbasierenden Anwendungen zu tun hatte. Dabei ist das mit FormView wesentlich angenehmer. Hätte ich das mal vorher gewusst...
-
Erstmal Danke für die Hilfe!
Klappt leider nicht
void CMainFrame::OnClose() { // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard. CMyView* pView = dynamic_cast<CMyView*>(AfxGetMainWnd()->GetActiveView()); ASSERT(pView); //... CFrameWnd::OnClose(); }
CMyView nichtdeklariertet Bezeichner. Also hab ich versucht den Header von der View zu includen, geht aber auch nicht?
-
include mal die view-header-datei in deiner app-header-datei.
Dann sollte es gehen.
-
Geht auch nicht, hab´s rückgängig gemacht jetzt geht leider gar nichts mehr
-
Was kommt denn dann für ne Fehlermeldung? Denn ich hatte auch das selbe Problem wie du. Konnte es dann beheben, dass ich es in der app-Header-Datei include.
-
Oha, geht doch, hatte ne andere Datei falsch included *peinlich* aber:
CMynView* pView = dynamic_cast<CMyView*>(AfxGetMainWnd()->GetActiveView());
'GetActiveView': Ist kein Element von 'CWnd'
Weisst du woran das liegt?
-
versuch mal:
CMynView* pView = dynamic_cast<CMyView*>(CMainFrame*)(AfxGetMainWnd()->GetActiveView());
-
Dann kommt:
CMainFrame' nicht erwartet
-
Dann versuche es mal so:
CMyView* pView = (CMyView*)(((CMainFrame*)AfxGetMainWnd())->GetActiveView());
Kann mich auch erinnern, dass da irgendeine Meldung kam.
-
CMyView* pView = (CMyView*)GetActiveView();
So geht´s!
-
Das was du das verwendest nennt sich DOC/VIEW.
Die View soll nur Datren darstellen. Somit haben Funktionen, welche die Daten aus der DOC verändert dort eigentlich nichts zu suchen.
Wenn du auf das achtest braucht du von der DOC auch nicht auf die View zugreifen.
-
@Ann: Super!
@Unix-Tom: Wir versuchen hier, von der MainFrame - Klasse aus einen Zeiger auf die View zu bekommen, nicht vom Doc.