Freigeben über


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 größe. Anwendungen können die Sperre verwenden, um die Zeichnung zu verhindern, wenn sie ähnliche Bewegungs- oder Größenvorgä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 Funktionen GetDC und BeginPaint 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 Ausgabe wird abgeschnitten. Die Sperre bleibt erhalten, bis die Anwendung sie durch Aufrufen von LockWindowUpdate löscht, wobei NULL für das Fenster angegeben wird. Obwohl LockWindowUpdate den sichtbaren Bereich eines Fensters leer erzwingt, 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 beim Verarbeiten von Tastatur- oder Mausnachrichten ein Nachverfolgungsrechteck zeichnen. Das System verwendet diese Methode, wenn der Benutzer Fenster verschiebt und größe. GetDCEx ruft den Anzeigegerätekontext aus dem Kontextcache des Anzeigegeräts ab, sodass die Anwendung den Gerätekontext so schnell wie möglich nach der Zeichnung freigeben muss.

Während eine Fensteraktualisierungssperre festgelegt ist, erstellt das System ein gesammeltes Begrenzungsrechteck für jedes gesperrte Fenster. Wenn die Sperre gelöscht wird, verwendet das System dieses begrenzungsgebundene Rechteck, um den Updatebereich für das Fenster und seine untergeordneten Fenster festzulegen, wodurch eine spätere WM_PAINT Nachricht erzwungen wird. Wenn das gesammelte begrenzungsgebundene Rechteck leer ist (das heißt, wenn keine Zeichnung aufgetreten ist, während die Sperre festgelegt wurde), wird der Aktualisierungsbereich nicht festgelegt.