Modal-Dialog und Thread



  • Hallo,
    ich sende aus einem Thread mit PostMessage Nachrichten an einen Dialog. Ich möchte, dass der Dialog modal ist. Das Problem ist, dass erst nach DoModal()
    der Dialog existiert und ich auch so erst vom dialog mit GetSafeHwnd() an das
    Fensterhandle komme. Das brauche ich aber für meinen Thread um die Nachricht
    mit PostMessage zu schicken. Nach DoModal geht das ja nicht mehr.

    Hat jemand eine idee ? Modeless möcht ich nicht benutzen.

    Grüße,
    c-mos



  • Erstell doch deinen thread in der InitDialog da hast du mit sicherheit das handle auf deinen Dialog.



  • Danke für die Antwort.
    Das habe ich mir auch schon überlegt, aber passt nicht
    ganz bei mir. Möchter Außerdem GUI und funktionalität getrennt
    halten.

    Grüße,
    cmos



  • na dann starte doch den thread wo du willst und übergib das handle auf den dialog erst in der InitDlg() oder is dir das schon wieder zu viel vermischt, dann bleibt nur noch eins thread holt sich das handle des dialoges und schaut immer ob das handle noch gültig ist bevor es benutzt wird, wobei wenn du mit Postmessaage arbeitest sollte das doch kein problem sein ob das handle gültig ist oder nicht, musst nur irgendwie das handle vom dialog in den thread bekommen



  • So ähnlich hab ichs auch gemacht. Ich starte den Thread bevor ich DoModal aufrufe.
    Im thread wart ich auf ein Event das der Dialog existiert und kann mir das Handle
    holen.

    übergib das handle auf den dialog erst in der InitDlg()

    Eher umgedreht. Ich brauch das Handle vom dialog um vom Thread mit PostMessage
    an diesen etwas schicken zu können.

    Jut,
    danke ncohmals.



  • ne das war net umgekehrt gemeint, du kannst durchaus aus der InitDlg dem Thread das Handle der dialoges übergeben, warum soll das nicht gehen?

    und wenn du da ein Event nutzt, dann sendest du das doch sicher auch aus der InitDlg() weil nach aufruf von DoModal() steckt der ja im MessagePool des dialoges also kannst du das event nur aus dem dialog aufrufe. Wobei wo ist jetzt der unterschied den Thread gleich im dialog zu starten oder vom dialog aus ein event zu senden, verstrickt sind die so und so, und das handle vom Dialog hast du ja eh erst in der InitDlg

    aber vielleicht erklärst du mir das ja, ich seh da nicht in deiner vorgehensweise durch



  • @c-mos:
    Guck dir mal die DoModal() Funktion in der MFC an. Da ist nix "modales" mehr dran.
    Wenn du dir den Code kopierst, kannst du nach dem Erstellen des "modalen" Dialogs, und vor dem Ausführen des Message-Loops, noch eigenen Code laufen lassen.


  • Mod

    Warum startest Du den Thread nicht mit dem Dialog in OnInitDialog... oder warum wartest Du nicht bis der Dialog erzeugt wird. Wenn der Dialog erzegt wurde kannst Du in WM_INITDIALOG ein entsprechendes Flag oder das Handle abspeichern und der Thread kann diese Info benutzen.


Anmelden zum Antworten