Den standard Dialog Datei->Öffnen wieder einbauen



  • Hallo,

    wie die Überschrift schon sagt möchte ich den standard Dialog Datei->Öffnen und Datei->Speicher wieder in meine SDI-Anwendung einbauen.
    Das Problem kommt daher das ich eine SDI-Anwendung heruntergeladen habe in der man Dateien als Hexadezimal zahlen anzeigen lassen kann. Dort öffnet man die Dateien mit dem standard Dialog und die Datei wird in der Methode CHexEditorDoc::Serialize(CArchive& ar) ausgelesen:
    if (ar.IsStoring())
    {
    // save
    ar.Write( m_szDataBuffer.GetBuffer(0), m_nBufferLength );
    }
    else
    {
    // tell view
    GetView()->Reset();

    // load the data
    LPTSTR pszBuffer = m_szDataBuffer.GetBuffer(ar.GetFile()->GetLength());
    m_nBufferLength = ar.Read( pszBuffer, ar.GetFile()->GetLength() );
    m_szDataBuffer.ReleaseBuffer();

    }
    Nun möchte ich eben Dateien in einem anderen Programm öffnen das auch eine SDI-Anwendung ist, bei der aber diese standard Funktionen gelöscht wurden.
    Kann man diese standard Dialoge wieder irgendwie importieren?
    Wäre sehr schön wenn mir jemand helfen kann. Vielen Dank!

    Gruß gabele



  • Ich würde die Quellen einfach aus der anderen Anwendung reinkopieren.



  • Hallo Tester2,
    was meinst du mit Quellen? Das Problem bei mir ist, das ich gar nicht weiß wo diese standard Dialoge programmiert sind, bzw. in welcher cpp-Datei oder Methode wieder eingefügt werden sollten.
    Gruß gabele



  • Hey, hat denn dann keiner ne Idee wie man die Serialize-Funktion aufrufen kann ohne den standard Dilog->öffnen?
    Gruß gabele



  • Ich glaube, Du vermischst da einige Dinge. Serialisierung und Standarddialoge sind zwei verschiedene Dinge.

    Das Gerüst für die Serialisierung findest Du in der Doc-Klasse. Was da wie gespeichert werden soll, musst Du schon selbst programieren. Und dann dort einfügen.

    Du hast garantiert nicht die Standarddialoge gelöscht, sondern nur die Menüpunkte die diese aufrufen und die kannst Du in der Resource selbst wieder einfügen. Die IDs hierfür lauten

    ID_FILE_NEW //neu
    ID_FILLE_OPEN //Öffnen
    ID_FILE_SAVE //speichern
    //etc.

    Dann musst Du die Command-Befehle in der Message-Map der Application-Klasse z.B.

    ON_COMMAND(ID_FILE_NEW, &CWinApp::OnFileNew)
    ON_COMMAND(ID_FILE_OPEN, &CWinApp::OnFileOpen)
    

    hinzufügen. Oder stehen sie da sogar noch?
    Oder Du erstellst dir ein neues Projekt und kompierst dann die eigenen Quellen wieder rein.

    Vielleicht solltest Du dich anhand von Literatur erst mal mit den Grundlagen vertraut machen.



  • Also danke erstmal für deine hilfe!
    Ich dachte das die Datei die man öffnet (über dieses standard weg) dann auf die Serialize-Funktion zugreifft, bzw. die geöffnete Datei irgendwie dort Serialisiert wird. Was dort passiert habe ich ja schon programmiert.
    Leider sind die Standartdialoge wirklich alle gelöscht. Habe das Programm nicht selbst angelegt sondern habe es fertig bekommen und soll es erweitern.
    Aber du hast mich auf jeden Fall schon mal weiter gebracht, da die Command_Befehle auch nicht mehr da waren.
    Nur leider bekomme ich nun einen Debug Assertion Failed, sobald ich auf Datei->öffnen klicke.

    Muss ich noch irgendwo was anderes wieder einfügen?

    Gruß gabele



  • bekomme ich nun einen Debug Assertion Failed

    Was kommt denn für eine Fehlermeldung?



  • Sorry war im Urlaub und konnte nicht weitermachen.
    Hab aber immer noch das gleiche Problem und hoffe ihr könnt mir helfen.

    Der Fehler kommt sobald ich auf Datei->öffnen klicke:
    Debug Assertion Failed!
    Program: C:\...
    File: appdlg.cpp
    Line: 35

    dort bei der Linie 35 steht:
    L33: void CWinApp::OnFileOpen()
    L34:{
    L35: ASSERT(m_pDocManager != NULL);
    L36: m_pDocManager->OnFileOpen();
    L37:}

    Stimmt hier irgendetwas nicht?
    Bin für jede Hilfe oder Tip sehr dankbar!

    Gruß gabele



  • gabele schrieb:

    Debug Assertion Failed!
    dort bei der Linie 35 steht:
    L35: ASSERT(m_pDocManager != NULL);
    Stimmt hier irgendetwas nicht?

    assert() ist eine Überprüfung zur Laufzeit in einer Debug-Version.

    Diese meldet: m_pDocManager ist NULL!
    Vielleicht fehlt die Initialisierung?

    Martin


Anmelden zum Antworten