Fensteraktualisierungssperre
Eine Fensteraktualisierungssperre ist eine temporäre Aussetzung der Zeichnung in einem Fenster. Das System verwendet die Sperre, um zu verhindern, dass andere Fenster über das Nachverfolgungsrechteck zeichnen, wenn der Benutzer ein Fenster verschiebt oder ändert. Anwendungen können die Sperre verwenden, um das Zeichnen zu verhindern, wenn sie ähnliche Bewegungs- oder Größenanpassungsvorgänge mit eigenen Fenstern ausführen.
Eine Anwendung verwendet die LockWindowUpdate-Funktion, um eine Fensteraktualisierungssperre festzulegen oder zu löschen, wobei das zu sperrende Fenster angegeben wird. Die Sperre gilt für das angegebene Fenster und alle untergeordneten Fenster. Wenn die Sperre festgelegt ist, geben die GetDC- und BeginPaint- funktionen einen Anzeigegerätekontext mit einem sichtbaren Bereich zurück, der leer ist. Da dies der Fall ist, kann die Anwendung weiterhin im Fenster zeichnen, aber alle Ausgaben werden abgeschnitten. Die Sperre wird beibehalten, bis die Anwendung sie löscht, indem sie LockWindowUpdate-aufruft und NULL- für das Fenster angibt. Obwohl LockWindowUpdate erzwingt, dass der sichtbare Bereich eines Fensters leer ist, macht die Funktion das angegebene Fenster nicht unsichtbar und löscht das WS_VISIBLE Formatvorlagenbit 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 Tracking-Rechteck zeichnen, wenn Tastatur- oder Mausnachrichten verarbeitet werden. Das System verwendet diese Methode, wenn der Benutzer Fenster verschiebt und größen. GetDCEx ruft den Kontext des Anzeigegeräts aus dem Kontextcache des Anzeigegeräts ab, sodass die Anwendung den Gerätekontext nach der Zeichnung so schnell wie möglich freigeben muss.
Während eine Fensteraktualisierungssperre festgelegt ist, erstellt das System für jedes gesperrte Fenster ein angesammeltes Umgebendes Rechteck. Wenn die Sperre gelöscht wird, verwendet das System dieses umgebende Rechteck, um den Aktualisierungsbereich für das Fenster und seine untergeordneten Fenster festzulegen, wodurch eine spätere WM_PAINT Nachricht erzwungen wird. Wenn das angesammelte umgebende Rechteck leer ist (d. h., wenn beim Festlegen der Sperre keine Zeichnung aufgetreten ist), wird der Aktualisierungsbereich nicht festgelegt.