Daten von Kind-Fenster an Haupt-Fenster übergeben



  • Hi, 🙂
    wie kann man Daten von Kind-Fenster an Haupt-Fenster übergeben? Im Kind-Fenster kann der Benutzer bestimmte Daten konfigurieren (es gibt mehrere int- und string-Daten), da werden sie beim Drücken 'Konfiguration übernehmen' eingelesen. Diese Daten sollen dem Haupt-Fenster mitgeteilt werden und das Haupt-Fenster soll wiederum diese Daten an die Anwendung übergeben, damit sie diese Daten verwenden kann.





  • Damit kann man eine Nachricht an das Haupt-Fenster senden, aber nicht die Daten übergeben. Oder?



  • Wenn du den Zeiger auf das Hauptfenster hast, kannst du damit prinzipiell alles machen, was du willst - z.B. Methoden (Setter) aufrufen oder public Elemente manipulieren. Natürlich muß dazu dein Hauptfenster in der Lage sein, die Daten entgegenzunehmen.

    (entweder du übergibst ihm die betroffenen Daten direkt - oder du sagst ihm nur, daß du Änderungen hast, und es holt sie sich selber ab)



  • OK, 🙂
    ich mache so: das Haupt-Fenster hat einen Zeiger auf das Kind-Fenster. Mit diesem Zeiger kann das Haupt-Fenster die konfigurierte Daten vom Kind-Fenster holen (z.B. mit get()-Methoden). Das soll aber nur dann passieren, wenn im Kind-Fenster der Button 'Konfiguration übernehmen' gedrückt wurde. Kann sein, dass der Benutzer die Konfiguration nicht ändern will. Wie soll das Haupt-Fenster erfahren, dass der Button im Kind-Fenster gedrückt wurde? Eine Windows-Nachricht dafür erstellen? Oder geht es anders? 😕



  • Wie schon gesagt, es gibt beide Möglichkeiten.

    Wenn du die mit der Nachricht probieren willst, such mal nach WM_USER.



  • Du kannst dir entweder über das System einen Pointer auf das Hauptfenster holen (siehe estartu's Link) oder als Alternative beim Anlegen der Kinddialoge diesen Zeiger übergeben (hatten wir das nicht schon mal?). Und über diesen Zeiger kannst du dann eine Methode des Hauptdialogs aufrufen - die dann z.B. sich die benötigten Daten holt.



  • Wenn Du dein Setup-Dialog Modal erstellst, kannst du doch bevor du DoModal aufrufst, deine Werte in die Membervariablen übertragen und wenn der Anwender 'Konfiguration übernehmen' =IDOK drückt die Werte aus den Membervariablen wieder auslesen und deine Anwendung auf die neuen Werte einstellen. Gilt wie gesagt mur wenn Du einen Modalen Dialog aus deinem Hauptfenster aufrufst.

    Gruß Matthias



  • schau mal in "c++ in 21 Tagen", da ist ein Kapitel mit Main- und Childfenstern.
    Allerdings auch wieder mit einem Modalen Dialog

    Ich hab mir immer eine Variable auf das Cildfenster gepackt und dann einfach die Daten abgegriffen. z.b.

    im Hauptdialog

    .h-File
    CMeinDlg cMeinDlg;
    int erg = 0;
    
    void funktionRechne()
    {
    erge = 2 + cMeinDlg.Var2;
    }
    

    im Child

    .h File
    int Var2;
    
    void funkitonButton()
    {
    // Eingabe in ein Edit ist Var2
    // Button geklickt
    }
    

    So hab ich daten zwischen 2 Dialogen transportiert. Ist recht schick in dem Buch / Pdf erklärt. Sollte man sich als Anfänger mal antun.



  • Vielen Dank für eure Hilfe! 🙂
    Ich habe einen modalen Kind-Dialog. Ich habe get()-Funktionen geschrieben, die mir Daten von Kind-Dialog liefern. Im Haupt-Dialog habe ich einen Zeiger auf den Kind-Dialog, so kann der Haupt-Dialog vom Kind-Dialog Daten bekommen. Das Problem ist, dass es an einer gewissen Stelle passieren soll - nur wenn der Button 'Konfig.übernehmen' im Kind-Dialog gedrückt wird. Das Haupt-Dialog soll das erfahren, eine Anwendung, die im Hintergrung läuft, stoppen, Daten vom Kind-Dialog einsetzen und die Anwendung wieder starten. Wie kann man das geschickt machen? 😕



  • Da der Dialog modal ist, pausiert die Anwendung solange der offen ist.
    Da musst du wohl erstmal auf einen nicht-modalen Dialog umstellen.

    Dann würde ich, wenn der Knopf gedrückt wird die Nachricht verschicken und in deren Handler im Haupt-Dialog die Daten abrufen und was sonst noch so gemacht werden soll.



  • Entschuldigung, ich habe mich vertippt. Natürlich habe ich einen nicht-modalen Kind-Dialog.



  • Okay, und woran haperts jetzt noch? 🙂

    SendMessage und los.



  • Ich komme nicht klar... 😞
    Beim Anklicken des Buttons 'Konfig.übernehmen' im Kind-Dialog wird eine Nachricht an das Haupt-Dialog versendet. Diese Nachricht soll evtl. einen Nachrichtbearbeiter in Haupt-Dialog aufrufen. Was soll dieser machen?

    Um genauer zu sein: ich benutze die Funktion OnTimer(), in der ein Paar Methoden für die Anwendung aufgerufen wird. Nach Übernahme der Daten aus dem Kind-Dialog soll die Anwendung gestoppt, Daten erneut und Anwendung wieder gestartet werden.



  • Noch_Student schrieb:

    Ich komme nicht klar... 😞

    Okay, versuchen wir mal das zu ordnen...

    Beim Anklicken des Buttons 'Konfig.übernehmen' im Kind-Dialog wird eine Nachricht an das Haupt-Dialog versendet.

    Okay. Das klappt bei dir auch?

    Diese Nachricht soll evtl. einen Nachrichtbearbeiter in Haupt-Dialog aufrufen. Was soll dieser machen?

    Eventuell?? Die macht das IMMER. Immer wenn die Nachricht ankommt, wird die Funktion ausgeführt.

    Um genauer zu sein: ich benutze die Funktion OnTimer(), in der ein Paar Methoden für die Anwendung aufgerufen wird. Nach Übernahme der Daten aus dem Kind-Dialog soll die Anwendung gestoppt, Daten erneut und Anwendung wieder gestartet werden.

    Also machst du KillTimer, übernimmst und erneuerst die Daten und startest den Timer wieder. Klingt soweit gut.

    Wenn du jetzt immer noch keine Idee hast, kommen wir um Code nicht mehr drumherum. Dann musst du mal zeigen, was du versucht hast. (Aber bitte vorsortiert und nicht alle Quellcodes hier rein. 😉 )



  • Ich weiß nicht, was der Nachrichtbearbeiter machen soll.



  • Noch_Student schrieb:

    Ich weiß nicht, was der Nachrichtbearbeiter machen soll.

    Der soll genau das machen, was du als Reaktion auf deinen "Konfig übernehmen" Button erwartest - mit KillTimer() den laufenden Timer anhalten, Daten aus dem Kind-Dialog auslesen und an die richtige Stelle schreiben, und schließelich mit SetTimer() den Timer neu starten, damit die Anwendung weiterlaufen kann.



  • Leute, 🙂 🙂 🙂 🙂 🙂
    wie schön, dass ihr da seid! 👍 👍 👍 👍 👍


Log in to reply