SendMessage an modales Dialogfenster
-
Hallo,
ich stehe grad auf dem Schlauch:
Ich möchte von einem Thread aus sich ständig aktualisierende Werte an einen modalen Dialog senden (SendMessage).
Dummerweise ist natürlich das HWND erst dann gültig wenn das Fenster mit DoModal() erzeugt wird, also hat man keine Chance da ranzukommen (oder doch?).
Wie löse ich das Problem?
Der Dialog sollte schon modal sein, damit garantiert nichts anderes gemacht werden kann, solange dieser Dialog offen ist.
Klar könnte man dies nichtmodal machen und das Hauptdialogfenster mit EnableWindow, in Abhängigkeit von Show/Hide Window, behandeln, nur sollte dies als letzter Workaround herhalten falls es sonst keine Möglichkeit gibt.Weiß jemand Rat?
MfG
-
Was ist daran dumm? Ein Handle gibt es eben erst wenn ein fenster da ist.
Ich verstehe Dein Problem nicht. Erzeuge das Fenster, starte den Threead und übergib das Handle...
-
Hallo,
also:
Das Programm ist steuert eine Maschine an. Im Hauptthread werden dazu diverse Parameter wie Motorpositionen, ect ständig ausgelesen.
Das Fenster was ich erzeuge soll zur Einstellung von diversen Maschinenfeatures dienen und es soll verhindert werden, daß vom Hauptfenster aus die Maschine gestartet werden kann, solange die Einstellungen noch nicht beendet sind.
Deshalb soll das Fenster Modal sein.
Aber die Fensterklasse ist auf die Parametererfassung des Hauptthreads angewiesen.
Dies soll mit::SendMessage (HandleModalerDialog, WMU_MESSAGE, 0, Parameter);
erledigt werden.
Jetzt das "Problem": Wie übergibt ein Modaler Dialog sein gültiges Fensterhandle an das Hauptdialogfenster, damit der Thread die Message übergeben kann und diese nicht ins leere läuft?
-
Du könntest z.B. die Daten, die dein Workerthread erzeugt, in der Dokumentenklasse ablegen. Der Dialog kann sie da abholen. Über eine vernüftige Synchronisation (Z.B. CCriticalSection) solltes du sicherstellen, dass der Zugriff nur auf gerade gültige Daten erfolgt. Dann kann ja auch aus der Dokumentenklasse der Aufruf zum Aktualisieren des Dialogs kommen. Weiterhin könntest du auch bei einem modalen Dialog ein Event setzen und beim Starten der Maschine wird geprüft, ob es gesetzt ist oder nicht. Schließt man den Dialog killt man einfach das Event. Damit kannst du die Maschine nicht starten, solange der Dialog offen ist.
-
OK ich habs doch hinbekommen.
Dank an alle.