MoveWindow langsam?
-
Mahlzeit,
ich bin gerade dabei Conways - Spiel des Lebens mit der WinAPI zu basteln. Dazu verwende ich einfach ein Gitter von Buttons (vielen Buttons). Jetzt möchte ich aber, dass wenn ich das Fenster groß ziehe, die Buttons mit wachsen. Dabei gehe ich so vor, dass ich mir mit GetClientRect die Größe des Fensterbereichs hole und dann die Breite und Höhe jeweils durch die Anzahl der Buttons in die Richtung teile (logisch). Anschließend gehe ich über das Array von Buttons drüber und setz eben die neue Position und Größe des Buttons per MoveWindow. Dies funktionert auch grundsätzlich erstmal so wie ich es mir dachte. Jedoch ist es bei 30 * 30 (mein Gitter) Buttons wirklich sehr langsam. Nun wollte ich fragen, warum dieser Vorgang so träge abläuft (also man sieht richtig wie sich die Buttons von oben nach unten aufbauen). Bibliotheken wie Qt oder Swing in Java(!!!) kriegen das sogar ohne Probleme geregelt. Gibt es einen hacken an der Sache?
PS:
Ich reagiere auf die Window-Message WM_SIZE.Viele Grüße
-
Schon mal an die Nutzung von DeferWindowPos gedacht?
-
Danke, funktioniert :). Hab bisher noch nicht so sehr viel mit der WinAPI gemacht, von daher kannte ich die Funktion nicht. Bei 50 * 50 Buttons wird es dann doch etwas langsam, aber ich denke mal, dass es bei dieser Menge berechtigt ist. Jetzt wäre ich noch sehr dankbar, wenn jemand noch eine Lösung gegen das Flakern hat :/.
Vielen Dank erstmal :).
-
Das Problem ist das die Buttons jetzt beim langsamen vergrößern ganz oft neu gezeichnet werden. Am Besten baust du dir eine Verzögerung oder sowas ein. Damit das Fenster sagen wir nur noch 10 mal pro Sekunde neugezeichent wird, dann sollte auch nichts mehr flackern.
PS: Langsam nerven die Kopfreichenaufgaben es ist Wochenende

-
Aber wie soll ich das machen? Weil es ist ja dann nicht sichergestellt, dass das Fenster beim letzten WM_SIZE (also bevor man aufhört die Größe zu verändern) immer gezeichnet wird. Dafür bräuchte ich eine Message, welche besagt, dass jetzt mit resizen aufgehört wurde.
edit:
hat sich gerade mit ws_clipchildren gelöst
vielen dank an euch 