Prozedur nach Erstellen/Anzeigen eines modalen Fensters
-
Hallo,
bei einem modalen Fenster möchte eine bestimmte Funktion einmal ausführen, aber nur wenn das Fenster vollständig erstellt und angezeigt wird. Gibt es da vielleicht eine Windows Message/Notification, die in diesem Fall gesendet wird? Oder hat jemand eine bessere Idee wie ich das machen kann?Edit: also ohne Interaktion mit dem Anwender (durch Knopfdruck oder so).
Grüße,
Rewind.
-
Wenn das modale Fenster ein Dialog ist, rufst du die Funktion in der DialogProzedur unter WM_INITDIALOG auf. Das sollte reichen!
-
berniebutt schrieb:
Wenn das modale Fenster ein Dialog ist, rufst du die Funktion in der DialogProzedur unter WM_INITDIALOG auf. Das sollte reichen!
Das ist aber nicht im Sinne des Fragestellers.
Bei WM_INITDIALOG ist erstmal noch gar nichts gezeichnet!Ich würde es so versuchen:
Du hast einen Zähler bzw. Flag-Variable eingerichtet, mit dem Du so den ersten WM_PAINT-Aufruf erkennen kannst
Wenn WM_PAINT aufgerufen wird, am Ende von WM_PAINT eine User-Definierte Nachricht an sich selbst senden?Nur so mal als Ansatz oder als Diskussionsgrundlage.
Mal aus Neugier: Warum hast Du dieses Problem?
HTH,
Martin
-
Mmacher schrieb:
Das ist aber nicht im Sinne des Fragestellers.
Bei WM_INITDIALOG ist erstmal noch gar nichts gezeichnet!Stimmt: bei WM_INITDIALOG wird nur genau einmal initialisiert. Also der beste Platz für den Aufruf einer einmal benötigten Funktion. Wenn dann noch etwas anderes aus der Funktion folgen soll, sollte das mit einer System-Nachricht oder einer benutzerdefinierten Nachricht zu regeln sein. Für präzisere Hilfe fehlen noch einige Angaben zur genauen Zielsetzung.
-
Und zudem kann man mit dem Stil WS_VISIBLE dafür sorgen, dass der Dialog auch während WM_INITDIALOG schonb sichtbar ist... und mit einem UpdateWindow/RedrawWindow kann man das erste zeichnen des Dialoges auch erzwingen...
Auch ein ShowWindow mit SW_SHOW in WM_INITDIALOG ist erlaubt.
-
Auch InvalidateRect(hwnd,NULL,TRUE) erzwingt ein Neuzeichnen des Fensters mit WM_PAINT woimmer man das veranlassen möchte.
-
Aber dann wird WM_PAINT erst aufgerufen, wenn die Messagequeue leer ist. UpdateWindow umgeht die Messagequeue, erzwingt das Neuzeichnen an genau dieser Stelle, wenn die Update-Region nicht leer ist (wenn dieser Aufruf in WM_INITDIALOG stattfindet wird sie das auch nicht sein).