MFC Doc/View - Wie Dokumentzugriff aus Dialog ?



  • So das ist jetz schon das dritte Forum .... Mal sehn....
    😃 😃 😕 😃
    Ich habe ein kleines Übungs-Programm geschrieben, das mir Quadrate zeichnet. (ganz Toll 😉 ) Über Doc/View kann ich die Koordinaten auch wunderbar abspeichern und laden. Die Koordinaten werden mir im Ansichtenfenster auch angezeigt und die Quadrate werden gezeichnet. Diese kann ich außerdem mit den Cursortasten verschieben. Die Anzeige der Koordinaten wird dann auch laufend erneuert. Schön...schön...

    Jetzt mein Problem. Ich will die Koordinaten in einem Dialog, der über ein Menü aufgerufen wird ändern. Den Dialog hab ich schon. Das Problem ist, daß ich keinen Zugriff auf die Daten im Dokument bekomme.

    Meine Frage:

    Was muß ich wo wie ändern (vieleicht z.B. includieren oder Zeiger einrichten???) um die Daten im Dialog anzuzeigen und dort ändern zu können. Wenn man dann auf OK klickt sollen die Quadrate im Ansichtenfenster natürlich mit den neuen Koordinaten neu gezeichnet werden.

    Vielen Dank für jede Hilfe. Es sind auch Links ins Internet hilfreich.



  • Versuch es mit GetDocument()



  • "Versuch es mit GetDocument()"

    Wenn ich das Mache kommt fogende Fehlermeldung: 😞

    C:\PROGRAMMIEREN TEST\graftab_\MainFrm.cpp(126) : error C2065: 'GetDocument' : nichtdeklarierter Bezeichner

    Folgende includes sind aber vorhanden: 🙄

    #include "graftab_Doc.h"
    #include "graftab_View.h"

    Und nu ?!?



  • In deiner Funktion, wo du den Dialog aufrufst:

    void CMyDocument::OnDialog()
    {
        CMyDialog dlg;
        dlg.variable1 = this->variable1;
        dlg.variable2 = this->variable2;
    
        if( dlg.DoModal() == IDOK)
        {
            this->variable1 = dlg.variable1;
            this->variable2 = dlg.variable2;
        }
    }
    

    Du legst die benötigten Variablen im Dialog an und kopierst vor dem Aufruf des Dialog die Variablen aus dem Dokument in die Dialogvariablen.
    Nach dem OnOK-Ereignisses deines Dialoges kannst du die geänderten Variablen wieder verwenden und die nötigen Aktion zum Neuzeichen o.ä. veranlassen.



  • Original erstellt von thomas80d:
    **In deiner Funktion, wo du den Dialog aufrufst:

    void CMyDocument::OnDialog()
    {
        CMyDialog dlg;
        dlg.variable1 = this->variable1;
        dlg.variable2 = this->variable2;
        
        if( dlg.DoModal() == IDOK)
        {
            this->variable1 = dlg.variable1;
            this->variable2 = dlg.variable2;
        }
    }
    

    Du legst die benötigten Variablen im Dialog an und kopierst vor dem Aufruf des Dialog die Variablen aus dem Dokument in die Dialogvariablen.
    Nach dem OnOK-Ereignisses deines Dialoges kannst du die geänderten Variablen wieder verwenden und die nötigen Aktion zum Neuzeichen o.ä. veranlassen.**

    Das ist der entscheidende Punkt. Die Kopie aus dem Dokument in die Dialogvariable.
    Die Variable ist in graftab_Doc.h und graftab_Doc.cpp als CPoint deklariert.

    ErstesQuadrat.x oder .y

    Die Zeile müßte also lauten: 😞

    dialog.m_ErstesXAlt = this->ErstesQuadrat.x;

    Dann kommt folgende Fehlermeldung: 😮

    C:\PROGRAMMIEREN TEST\graftab_\MainFrm.cpp(129) : error C2039: 'ErstesQuadrat' : Ist kein Element von 'CMainFrame'
    c:\programmieren test\graftab_\mainfrm.h(12) : Siehe Deklaration von 'CMainFrame'

    Wat nu ... 🙄



  • Dann hast du die Funktion in der falschen Klasse definiert.

    Bei dir steht dann anstatt dem hier:

    void CMyDocument::OnDialog()
    

    , dann das hier

    void CMainFrame::OnDialog()
    

    Das musst dann ändern.

    Du kannst es notfalls auch in die View-Klasse packen, wo du dann mit GetDocument an deine Variablen kommst; aber CMainFrame ist immer die schlechtere Wahl, da man da immer nur mit großem Aufwand an sein Document/seine View kommt.



  • Original erstellt von thomas80d:
    **Dann hast du die Funktion in der falschen Klasse definiert.

    Bei dir steht dann anstatt dem hier:

    void CMyDocument::OnDialog()
    

    , dann das hier

    void CMainFrame::OnDialog()
    

    Das musst dann ändern.

    Du kannst es notfalls auch in die View-Klasse packen, wo du dann mit GetDocument an deine Variablen kommst; aber CMainFrame ist immer die schlechtere Wahl, da man da immer nur mit großem Aufwand an sein Document/seine View kommt.**

    SUPER! Besten Dank! 😃 😃 😃

    Bin natürlich nicht darauf gekommen die ganz Funktion in die graftab_view.cpp Anwendung zu packen. 🙄
    Na ja aller Anfang is schwer... 🙂


Anmelden zum Antworten