Datenexport von Dialogfenster in Dokumentenklasse



  • Naja, Variablenübergabe funktioniert im Prizip wie Staffellauf.

    Der Dialog hat was. Das kann er dem Mainfrage geben. Der kann das ans Doc geben.
    Direkt vom Dialog zum Doc geht nicht, weil die sich nicht kennen.

    Naja, wenn die Funktion nicht aufgerufen wird, dann ruf sie doch auf. 😃
    Oder geht das nicht? Dann gib das Array nur ans Doc und das speichert das dann zwischen für die spätere Verwendung, wenn dann die Funktion aufgerufen wird.



  • Dann muss ich aber in all diesen Klassen diese Membervariablen deklarieren, sonst sagt er "nichtdeklarierter Bezeichner" ?

    Ich habe in meinen Doc die Header Datei der Dialogfeldklasse eingebunden. Über die Zeilen die ich vorhin geschrieben habe, rufe ich dann diese Werte ab.

    Ich muss also um überhaupt rechnen zu können, in den Frame einen Punkt "Berechnungen" einbringen, der dann diese Funktion aufruft, die im Doc ist , und auf die Werte aus den Frame zugreift?



  • 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