Datenexport von Dialogfenster in Dokumentenklasse



  • Ich fürchte, du hast mich nicht verstanden. 😞

    Lies bitte mal:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-103523.html



  • Also kurz nach mal skizziert:

    In meinen Frame hab rufe ich die Funktion "OnEingabedlg" auf. In dieser Dialogfeldklasse (CDateneingabe) werden die Ergebnisse in öffentlich Membervariablen gespeichert.
    Rufe ich nun in meinen Frame die nächste Funktion auf ("Berechnung"), dann verwendet diese einen Zeiger um auf die Membervariablen der anderen Klasse zuzugreifen. Ist das richtig?

    Wofür brauche ich dann übehaupt die Dokumentenklasse? Wenn ich z.B. in meine Klasse CChildFrm den Header der CDateneingabe.h mit einbinde müsste ich zugriff darauf haben. Da ist doch der Schritt über die Dokumentenklasse überflüssig, oder liege ich jetzt völlig daneben?



  • roeschti schrieb:

    Also kurz nach mal skizziert:

    In meinen Frame hab rufe ich die Funktion "OnEingabedlg" auf. In dieser Dialogfeldklasse (CDateneingabe) werden die Ergebnisse in öffentlich Membervariablen gespeichert.

    Soweit ist es okay. 🙂

    roeschti schrieb:

    Rufe ich nun in meinen Frame die nächste Funktion auf ("Berechnung"), dann verwendet diese einen Zeiger um auf die Membervariablen der anderen Klasse zuzugreifen. Ist das richtig?

    Jein. Du hast das hinter dem Link gelesen?
    Also, Du hast deinen Dialog, der irgendwo ein wenig Speicher belegt und da ist auch das gefüllte Array.
    Wenn du nun im Doc einfach einen Zeiger machst, dann zeigt der ja ins Nirvana, aber NICHT auf den Speicherplatz, wo der Dialog zu finden wäre. (Im Beispiel würdest du jetzt versuchen, mit dem Parkplatz loszufahren.)
    Du musst also das Array weitergeben über Instanzen, die sich kennen. (s.o.)

    Jetzt besser? 🙂



  • Und diese Instanz wird in dem Document erzeugt?
    Also in der Art:

    CDateneingabe Wert1, Wert2;
    

    Wenn ich dann aus dem ChildFrm zugreifen möchte mache ich

    Wert1.variable1     //variable1 ist eine öffentliche Membervariable der Klasse CDateneingabe
    

    vorrausgesetzt die Doc.h ist eingebunden?
    ??Jetzt besser?



  • Nicht wirklich. 😞

    Also, eine Möglichkeit wäre:
    Vom Frame aus die Funktion im Doc aufrufen.
    Die ruft den Dialog auf, danach kannst du das Array abfragen.



  • Nochmal zwei Schritte zurück. Du sagtest, das Array wird über Instanzen weitergegeben die sich kennen. Wie kann ich so was machen? Also wo musss ich was wie deklarieren?

    Damit meine Funktion zur Berechnung überhaupt aufgerufen wird, habe ich sich in eine Funktion der Klasse ChildFrm geschrieben. In meinen Doc steht jetzt nichts mehr drin 😞

    Nicht das wir aneinander vorbeireden - kann ich dir es vielleicht per mail schicken?

    cu



  • Naja, wenn die jetzt schon im Childframe steht, dann hast du es doch fast geschafft. 🙂

    Jetzt musst du nur noch einen Zeiger auf den Dialog der Funktion geben. Die kann dann den Zeiger verwenden um die Daten auszulesen.

    Also:

    CDateneingabe dlg;
    dlg.DoModal();
    Berechne(&dlg);
    


  • Ich habe einen Frame: In diesem Frame gibt es einen Punkt GPS, zu diesem noch zwei Unterpunkte (Eingabedialog öffnen und Streckenverlauf)

    Wenn ich nun Eingabedialog öffnen wähle, öffnet sich ein Dialogfenster. Darin werden Daten in ein CStringArray eingelesen. Anschließend wird der Dialog mit OK beendet.
    Die Daten sollen nun in einer weiteren Funktion berechnet und anschließend in dem geöffneten Dokument grafisch dargestellt werden. Zur besseren Übersichtlichkeit wollte ich die Funktion (Funktion trägt den Namen F_Berechnung) in die Dokumentenklasse schreiben, und die grafische Darstellung in die View-Klasse.
    Wähle ich also danach in diesem Frame unter GPS den Punkt Streckenverlauf, so muss diese Funktion (z.B OnStreckenverlauf) dann die Berechnungen durchführen. Sie muss also dann die zuvor in dem Dokument geschriebene Funktion F_Berechnungen aufrufen.

    Das mit dem doModal funktioniert also schon. Die Daten sind nun in meiner öffentlich Membervariable der Dialogklasse. Nun muss ich also Instanzen erzeugen, um auch aus der Dokumentenklasse daraufgreifen zu können.

    Ich hoffe die Situation jetzt nochmal eindeutig dargestellt zu haben 🙄



  • Nun muss ich also Instanzen erzeugen...

    du hast doch schon eine. 🙄

    Also, ich habe jetzt mal geguckt, GetActiveDocument funktioniert auch für eine MDI. Du kannst die Funktion also nutzen, mit der kommst du von Frame aus an dein Dokument.
    Schau mal, was man nettes in der MSDN dazu findet:

    CMDIChildWnd * pChild =
              ((CMDIFrameWnd*)(AfxGetApp()->m_pMainWnd))->MDIGetActive();
    
          if ( !pChild )
              return NULL;
    
          CDocument * pDoc = pChild->GetActiveDocument();
    
          if ( !pDoc )
             return NULL;
    
          // Fail if doc is of wrong kind
          if ( ! pDoc->IsKindOf( RUNTIME_CLASS(CMyDoc) ) )
             return NULL;
    
          return (CMyDoc *) pDoc;
    

    Denk mal in Ruhe drüber nach und wenn du nicht weiter weißt, schicks an mail@estartu.de
    Vor Morgen früh komme ich aber nicht dazu.

    🙂



  • Danke erstmal, werd mal ne Nacht drüber schlafen. Aber ich denke jetzt geht es in die richtige Richtung 🙂

    OK, dann vielleicht 😕 bis morgen

    cu


Anmelden zum Antworten