Synchrones und asynchrones Zeichnen
Die meisten Zeichen, die während der Verarbeitung der WM _ PAINT-Nachricht ausgeführt werden, sind asynchron. Das heißt, es gibt eine Verzögerung zwischen dem Zeitpunkt, zu dem ein Teil des Fensters ungültig wird, und der Zeit, zu der WM _ PAINT gesendet wird. Während der Verzögerung ruft die Anwendung in der Regel Nachrichten aus der Warteschlange ab und führt andere Aufgaben aus. Der Grund für die Verzögerung ist, dass das System das Zeichnen in einem Fenster im Allgemeinen als Vorgang mit niedriger Priorität behandelt und so funktioniert, als ob Benutzereingabenachrichten und Meldungen, die sich auf die Position oder Größe eines Fensters auswirken können, vor WM PAINT verarbeitet _ werden.
In einigen Fällen ist es erforderlich, dass eine Anwendung synchron zeichnen kann, d. &a. im Fenster unmittelbar nach dem Ungültig machen eines Teils des Fensters. Eine typische Anwendung zeichnet ihr Hauptfenster unmittelbar nach dem Erstellen des Fensters, um dem Benutzer zu signalisieren, dass die Anwendung erfolgreich gestartet wurde. Das System zeichnet einige Steuerfenster synchron, z. B. Schaltflächen, da solche Fenster als Fokus für Benutzereingaben dienen. Obwohl jedes Fenster mit einer einfachen Zeichnungsroutine synchron gezeichnet werden kann, sollten alle diese Zeichnungen schnell durchgeführt werden und die Fähigkeit der Anwendung, auf Benutzereingaben zu reagieren, nicht beeinträchtigen.
Die Funktionen UpdateWindow und RedrawWindow ermöglichen synchrones Zeichnen. UpdateWindow sendet eine WM _ PAINT-Nachricht direkt an das Fenster, wenn der Updatebereich nicht leer ist. RedrawWindow sendet auch eine WM _ PAINT-Nachricht, gibt der Anwendung jedoch mehr Kontrolle darüber, wie das Fenster gezeichnet werden soll, z. B. ob der Nichtclientbereich und der Fensterhintergrund gezeichnet werden oder ob die Nachricht gesendet werden soll, unabhängig davon, ob der Updatebereich leer ist. Diese Funktionen senden die WM _ PAINT-Nachricht direkt an das Fenster, unabhängig von der Anzahl der anderen Nachrichten in der Anwendungsnachrichtenwarteschlange.
Jedes Fenster, das zeitaufwändige Zeichnungsvorgänge erfordert, sollte asynchron gezeichnet werden, um zu verhindern, dass ausstehende Meldungen beim Zeichnen des Fensters blockiert werden. Außerdem sollte jede Anwendung, die häufig kleine Teile eines Fensters für ungültig erklärt, zulassen, dass diese ungültigen Teile in einer einzigen asynchronen WM _ PAINT-Nachricht konsolidiert werden, anstatt in einer Reihe synchroner WM _ PAINT-Nachrichten.