Modales Fenster
-
Ich kann ja Messages vom Modalen Fenster aus verschicken (z.B. bei Button gedrückt). In diesen Funktionen möchte ich das modale Fenster aktualisieren.
Das Modale Fenster muss doch Messages irgendwie entgegen nehmen? und wenn ja, dann wie?
-
Das nimmt ja auch Messages entgegen, nur der Rest des Programms wird nicht reagieren und somit nix versenden.

Ruf die Funktionen direkt auf oder mach einen nicht-modalen Dialog.
-
estartu schrieb:
Ruf die Funktionen direkt auf oder mach einen nicht-modalen Dialog.
nicht modal geht nicht. soll ein passwortdialog werden!
Und wenn ich die Funktionen des Dialoges direkt aufrufe passiert nichts.
-
Okay, stellen wir uns nochmal ganz doof:
Was hast du, was willst du?
-
Ich habe dynamisch ein CDialog erzeugt:
try { dlgPwd = new CDlgPwd(this); int nResponse = dlgPwd->DoModal(); if (dlgPwd) delete dlgPwd; dlgPwd = NULL; switch (nResponse) { case IDCANCEL: PostMessage(WM_CLOSE,0,0); return; case IDOK: break; } } catch(...) { AfxMessageBox(L"error"); if (dlgPwd) delete dlgPwd; return; }so bei DoModal beliebt mein Programm stehen und erwartet vom Dialog eine Antwort. Ich kann aber vom Dialog aus (z.B. durch Buttons) Nachrichten ans Hauptprogramm senden (über PostMessage/SendMessage), welche bestimmte Funktionen ausführen können (z.B. Prüfen von Passwort / Datenbankabfrage etc.) ich möchte bei falsch eingabe dem Dialog befehlen alle Inhalte der CEdits wieder zu löschen. Am besten durch eine Funktion im modalen Dialog. Z.B. ReInit();
Aber wenn ich die Funktion dlgPwd->ReInit() in den Funktionen aufrufe, welche durch das modale Fenster versendet wurden, wird diese funktion nicht ausgeführt.
-
Rio1 schrieb:
so bei DoModal beliebt mein Programm stehen und erwartet vom Dialog eine Antwort.
Ja.
Ich kann aber vom Dialog Nachrichten ans Hauptprogramm senden (PostMessage/SendMessage),
Jein, ich bin mir nicht sicher ob die ankommen...
welche bestimmte Funktionen ausführen können (z.B. Prüfen von Passwort / Datenbankabfrage etc.)
Das Programm steht, wie soll es was tun?
ich möchte bei falsch eingabe dem Dialog befehlen alle Inhalte der CEdits wieder zu löschen. Am besten durch eine Funktion im modalen Dialog. Z.B. ReInit();
Warum musst du das Hauptprogramm bemühen? Kann der Dialog das nicht selber?
Aber wenn ich die Funktion dlgPwd->ReInit() in den Funktionen aufrufe, welche durch das modale Fenster versendet wurden, wird diese funktion nicht ausgeführt.
Ja, klar. Deutschland, 10:32... das Programm steht.

-
estartu schrieb:
Jein, ich bin mir nicht sicher ob die ankommen...
die kommen an und führen auch alles korrekt aus. Nur halt keine FktAufrufe des Dialoges.
ReInit(); soll erst dann ausgeführt werden, wenn die nachricht angekommen ist, darum kann ich das nicht gleich in dem Dialog ausführen.
-
Wieso kann der Dialog das nicht selber?
-
wie meinst denn das?
-
Naja, du lässt ja irgendwelche Aufgaben außerhalb des Dialoges erledigen...
Wieso kannst du das nicht in der Dialogklasse machen?Wozu brauchst du die Nachricht, von der du da schreibst:
ReInit(); soll erst dann ausgeführt werden, wenn die nachricht angekommen ist, darum kann ich das nicht gleich in dem Dialog ausführen.
-
ja stimmt schon. Also ich mache in der Nachricht einen Datenbankzugriff und danach sollte er die Edit-Felder löschen. Aber ich kann auch im Dialog selbt (z.B. bei OK) die Edit-Felder löschen... geht auch. Jedoch sollte das vor dem versenden der Nachricht geschehen...
Fazit: Es ist also generell nicht möglich Funktionen ein modales Fenster von ausserhalb auszurufen. (sehe ich das richtig?)
-
Rio1 schrieb:
Fazit: Es ist also generell nicht möglich Funktionen ein modales Fenster von ausserhalb auszurufen. (sehe ich das richtig?)
Das ist jedenfalls mein Wissensstand.

-
dann erstmal danke für alles.
Grüße Rio.