Fensteraktualisierungssperre
Eine Fensteraktualisierungssperre ist eine vorübergehende Unterbrechung des Zeichnens in einem Fenster. Das System verwendet die Sperre, um zu verhindern, dass andere Fenster das Nachverfolgungsrechteck überziehen, wenn der Benutzer ein Fenster bewegt oder die Größe eines Fensters angibt. Anwendungen können die Sperre verwenden, um das Zeichnen zu verhindern, wenn sie ähnliche Verschieben- oder Größenvorgänge mit ihren eigenen Fenstern durchführen.
Eine Anwendung verwendet die LockWindowUpdate-Funktion, um eine Fensteraktualisierungssperre festzulegen oder zu löschen, und gibt das zu sperrende Fenster an. Die Sperre gilt für das angegebene Fenster und alle untergeordneten Fenster. Wenn die Sperre festgelegt ist, geben die Funktionen GetDC und BeginPaint einen Anzeigegerätekontext mit einem sichtbaren, leeren Bereich zurück. Aus diesem Grund kann die Anwendung weiterhin im Fenster zeichnen, aber die Ausgabe wird abgeschnitten. Die Sperre bleibt bestehen, bis sie von der Anwendung durch Aufrufen von LockWindowUpdate unter Angabe von NULL für das Fenster enthält. Obwohl LockWindowUpdate erzwingt, dass der sichtbare Bereich eines Fensters leer ist, macht die Funktion das angegebene Fenster nicht unsichtbar und das WS VISIBLE-Stilbit _ nicht.
Nachdem die Sperre festgelegt wurde, kann die Anwendung die GetDCEx-Funktion mit dem DCX LOCKWINDOWUPDATE-Wert verwenden, um einen Anzeigegerätekontext abzurufen, um über das gesperrte Fenster zu _ zeichnen. Dadurch kann die Anwendung ein Nachverfolgungsrechteck zeichnen, wenn Tastatur- oder Mausnachrichten verarbeitet werden. Das System verwendet diese Methode, wenn der Benutzer Fenster verschiebt und die Größe von Fenstern bezieht. GetDCEx ruft den Anzeigegerätekontext aus dem Kontextcache des Anzeigegeräts ab, sodass die Anwendung den Gerätekontext so schnell wie möglich nach dem Zeichnen wieder frei geben muss.
Während eine Fensteraktualisierungssperre festgelegt ist, erstellt das System ein kumuliertes umschließendes Rechteck für jedes gesperrte Fenster. Wenn die Sperre wieder frei ist, verwendet das System dieses umschließende Rechteck, um den Updatebereich für das Fenster und seine untergeordneten Fenster zu setzen und eine letztliche WM _ PAINT-Meldung zu erzwingen. Wenn das akkumulierte umschließende Rechteck leer ist (d. h., wenn keine Zeichnung erfolgt ist, während die Sperre festgelegt wurde), wird der Aktualisierungsbereich nicht festgelegt.