SDI Serialize



  • "Mein Auto ist ein BMW, wie bekomm ich daraus einen Mercedes?"



  • Hallo.

    Also ich verwende die Serialize-Methode meiner Klasse immer so:

    void CYourDlg::Speichern()
    {
       CFile* file = new CFile;
       file->Open("C:\Neu.txt", CFile::modeCreate | CFile::modeWrite);
       CArchive ar(file, CArchive::store);
    
       CMyClass* p = new CMyClass;
    
       //p mit Werten füllen oder was auch immer...
    
       p->Serialize(ar);
    
       ar.close;
       file->Close(); //weiß net genau, ob das noch sein muss / kann
    
       delete file;
       delete p;
    }
    

    MfG
    Happosai

    [edit: [/cpp] vergessen, ich will endlich den Vorschau-Button! 😃 ]

    [ Dieser Beitrag wurde am 30.04.2003 um 18:16 Uhr von Happosai editiert. ]

    [ Dieser Beitrag wurde am 30.04.2003 um 18:17 Uhr von Happosai editiert. ]



  • @Happosai
    du erstellst dir also ein neues CFile objekt. Ich dachte nur, daß man auf das von der sdi bereitgestellte einfluss nehmen kann.

    @renescherzkeks

    BOOL BMWKaeuferSuchen(UINT VBPreis)
    {
      if(KaeuferGefunden())
        BMWVerkaufen(NeuesAuto);
    }
    void BMWVerkaufen(CString NeuesAuto)
    {
      if(MercedesGefunden(UINT MaxPreis))
      UeberGebeBMW();
      KaufeMercedes();
    }
    

    [ Dieser Beitrag wurde am 30.04.2003 um 19:22 Uhr von Kext editiert. ]



  • Rene hat das hier keineswegs als scherz gemeint.

    Serialize bekommt ein fertig erstelltes CArchive. Das hat ein fertig erstelltes CFile. Du musst wenn überhaupt einfluss nehmen bevor das CArchive erstellt wurde.

    Der vergleich mit den Autos mag daher etwas abstrakt, aber treffend sein.



  • Wohl gemerkt, ich proggte bis jetzt immer OHNE Doc/View! Also hab ich's mit der Implementierung des oben gezeigten Codes etwas leichter, da ich mich nicht auf die Trennung Daten / Anzeige konzentrieren muss.
    Diese Info hat jetzt zwar keinen wirklichen Bezug zum Thema, aber wenn ich ganz fest die Daumen drücke, merkt's vielleicht keiner :p

    MfG
    Happosai



  • Serialize bekommt ein fertig erstelltes CArchive. Das hat ein fertig erstelltes CFile. Du musst wenn überhaupt einfluss nehmen bevor das CArchive erstellt wurde.

    Der vergleich mit den Autos mag daher etwas abstrakt, aber treffend sein.

    ich wollt doch nur wissen ob es irgendwie geht. das heist, ob und wie ich vorher einfluss nehmen kann.

    Der Autovergleich ist total abstrakt und absolut unpassend. Und wenn man jemand etwas erklären möchte und dazu Moderator in einem Forum ist, sollte man vielleicht auch versuchen, eine gewisse Ernsthaftigkeit und Seriösität an den Tag zu legen.



  • Hm, ich hab ne weile gesucht und hab nichts gefunden, wie man darauf einfluss nehmen könnte. Aber interessieren würde mich das auch.

    Ich denke in die richtung des Dateidialoges der Aufgerufen wird. Dort wird ja der Name vom Benutzer erfragt. Schau mal ob Du da was in der richtung findest, wann ja sag bescheid 🤡 (Machs umgekehrt auch so 🤡))

    Und zu den Beispiel von Rene:
    Je mehr erfahrung man mit sich bringt, um so abstrakter werden manchmal die Beispiele. Nicht übeln nehmen 🤡

    [edit].... mal wieder die Smilies...[/edit]

    [ Dieser Beitrag wurde am 01.05.2003 um 01:56 Uhr von Knuddlbaer editiert. ]



  • Hallo.

    Rein technisch wäre es in einem SDI-Projekt mit Doc/View doch möglich, die OnSaveDocument()-Methode (bzw. die OnLoadDocument-Methode) der Dokument-Klasse zu überschreiben und nichtden Code der Basisklasse aufzurufen, oder täusche ich mich da? 😉

    BOOL CSDIDoc::OnSaveDocument(LPCTSTR lpszPathName) 
    {
       // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    
       // return CDocument::OnSaveDocument(lpszPathName);
    
       // hier den Code aus dem obigen Beispiel meinerseits einügen
    }
    

    MfG
    Happosai



  • Original erstellt von Kext:
    Wie kann man der Serialize Funktion beibringen welche dateiendung sie benutzen soll? 😕

    Ganz vergessen nachzufragen:

    Willst Du das nur einmal in Deinem Projekt ändern, oder immer wieder wärend der Laufzeit ?!



  • @Happosai: hmm, mal ausprobieren. hört sich gut an.

    @Knuddlbaer: die anwendung soll nur ein dateityp kennen, und somit laden und speichern können. er muss also nicht zur laufzeit geändert werden.

    gruß



  • Endlich was gefunden dazu,

    wens interresiert:

    http://www.codeguru.com/doc_view/RemovingFilters.shtml



  • Zitat MSDN

    "DIBLOOK: Illustrates the Use of DIBs and Color Palettes
    All Visual Studio 6.0 samples are contained in a single executable, which is available for download.

    The DIBLOOK sample illustrates the use of device-independent bitmaps (DIBs) and the closely related use of color palettes.

    DIBLOOK also illustrates a document that has an externally defined file format (in this case, the DIB file format). This is in contrast to an internally defined file format, which is otherwise implied when the framework automatically calls the document's Serialize function to store the contents of the document on disk. DIBLOOK further illustrates use of the Clipboard, CFile, and scroll views.........."


Anmelden zum Antworten