Ein neues Document öffnen und mit Text beschreiben



  • Ja gut da mag was dran sein. ich hab da wohl sicherlich irgendwas nicht so ganz verstanden. Aber wenn ich jetzt in meiner App eine Funktion habe aus der heraus ich eine Neue Datei öffnen möchte, dann mach ich das mit OnNewDocument. Aber ich hab keinen Zugriff auf die Funktion GetActiveDocument. Da sagt er mir das ich auf ein nonstatic function zugreifen möchte! wie geht es dann weiter??

    Und was beudeutet denn nun Activ?

    Ist das einfach nur die Vorlage die für die geöffnete Datei benutzt wird? also z.B. txt-File oder wie?

    Danke.

    mfg
    alex



  • Alex171184 schrieb:

    Aber ich hab keinen Zugriff auf die Funktion GetActiveDocument. Da sagt er mir das ich auf ein nonstatic function zugreifen möchte! wie geht es dann weiter??

    Ich glaube das hier hilft dir: http://www.codeguru.com/forum/showthread.php?t=281430 🙂



  • AfxGetMainWnd()->GetActiveView()->GetDocument();

    löst foglgende Fehlermeldung:

    error C2039: 'GetActiveView' : is not a member of 'CWnd'



  • Wow, die haben komplett vergessen, das Casten zu erwähnen. 😮
    Na, dann nochmal was zu lesen, steht zwar SDI dran, aber ich hab wenigstens das Casten erklärt. 😃
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-125623.html



  • Ok Danke für die Links. Jetzt weiß ich zwar wie ich auf meine C...Doc komme, aber wie komme ich jetzt von Doc auf das mit OnFileOpen geöffnete File und schreibe dort mein CString rein. ICh hab mal ein wenig geschaut, es gibt so etwas wie GetFile im Doc. Aber die Funktion will ein lpszFileName. von der Funktion GetFile gibt es dann eine Funktion Write. ich nehme an mit der könnte ich dann rausschreiben. Also wie komme ich jetzt auf mein offenes File? einen Pfad hab ich ja noch nicht zu diesem offenen File?!

    Danke

    mfg
    Alex



  • Das Dokument IST dein geöffnetes File 😉 Das heißt, du müsstest die Texte als Member deiner Doc-Klasse unterbringen und in der Serialize()-Methode auf Platte schreiben (die wird aufgerufen, wenn das Dokument gespeichert wird).



  • Aber genau das will ich ja nicht erreichen. Ich möchte ja die Datei nicht speichern, sondern lediglich als eine Art Zwischenspeicher behandeln. GEspeichert wird diese Datei möglicherweise gar nicht. Und ich kann ja auch meherere geöffnete Files haben. Ist ja schließlich MDI. Oder bin ich jetzt ganz falsch?



  • Was willst du denn nun? Willst du die Daten auf Platte speichern oder nicht? Entscheide dich bitte.

    (und versuch bei der Gelegenheit, verständlich zu erklären, was du eigentlich beabsichtigst)



  • Ich hab ein Programm. Diesem Programm gebe ich eine Quelle (1.File). Aus dieser Quelle wird eine weitere Datei erzeugt (2.File). fertig ist das Programm.

    Jetzt kann es abe sein das Möglicherweise nicht alle Informationen(Text) durch das Programm automatisch in das 2. File geschrieben worden sind. Diese muss der Benutzer, aber nur wenn er das möchte, von Hand einfügen. Damit das ein bischen schneller geht, möchte ich ein Teil dieser Informationen dem Benutzer bereitstellen. In Form von einem 3. File. Dieses möchte ich aber nicht abspeichern. Ich möchte es nur Anzeigen, und dort meinen Text anzeigen lassen. Diesen Text KANN der Benutzer, wenn er möchte, in das 2.File hineinkopieren und dort dann auch ergänzen. Wenn er denn Text kopiert und ergänzt hat, verliert das 3.File seine Bedeutung. Jetzt Kann der Benutzer selbst entscheiden, ob er es schließt und somit lediglich als "Zwischenspeicher" genutzt hat, oder ob er es auf Platte speichern möchte(aus welchem Grund auch immer).

    Mehr möcht ich gar nicht realisieren.

    Danke.

    mfg
    Alex



  • Also das klingt auf jeden Fall nicht nach einem typischen Doc-View-Szenario (in der klassischen Anwendung hast du nur ein File, das geöffnet, verändert und schließlich wieder gespeichert wird).



  • Das heißt was ichda realisieren möchte ist nicht möglich?



  • Im übrigen wozu brauch ich eine MDI Anwendung wenn ich immer nur ein File öffne?



  • Klar ist es möglich, aber dazu mußt du etwas über den Tellerrand hinausschauen (und z.B. direkt mit fstream's oder CFile's hantieren).

    m übrigen wozu brauch ich eine MDI Anwendung wenn ich immer nur ein File öffne?

    Das frage ich mich auch 😉 wenn du nur ein File öffnest, reicht eine SDI-Anwendung völlig aus.



  • Ok. Soweit war mir das schon klar, aber ich einfach nicht wie ich den Handle auf das neugeöffnete File bekomme?!



  • Alex171184 schrieb:

    Ok. Soweit war mir das schon klar, aber ich einfach nicht wie ich den Handle auf das neugeöffnete File bekomme?!

    OK, dann ein Ansatz: Du verwendest NICHT die OnNewDocument() und Co., um dein "drittes File" zu öffnen. Stattdessen kannst du dir den Dateinamen der Datei besorgen (entweder fest vorgegeben oder über einen CFileDialog) und öffnest anschließend ein CFile mit diesem Namen, das du dir an zentraler Stelle in der Anwendung zwischenlagerst.



  • Also praktisch folgendermaßen:

    Zwischenspeicher.Open("hallo.spf",CFile::modeCreate | CFile::modeWrite);
    Zwischenspeicher.Write("wunderbar",7);
    Zwischenspeicher.GetFilePath();
    Zwischenspeicher.Close();

    OpenDocumentFile("hallo.spf");



  • Sorry Zwischenspeicher ist vom Typ CFile.

    Jetzt wird aber Trotzdem auf Platte gespeichert? 😃


Anmelden zum Antworten