Partager via


Verrouillage de mise à jour de fenêtre

Un verrou de mise à jour de fenêtre est une suspension temporaire du dessin dans une fenêtre. Le système utilise le verrou pour empêcher d’autres fenêtres de dessiner sur le rectangle de suivi chaque fois que l’utilisateur déplace ou dimensionne une fenêtre. Les applications peuvent utiliser le verrou pour empêcher le dessin s’ils effectuent des opérations de déplacement ou de dimensionnement similaires avec leurs propres fenêtres.

Une application utilise la fonction LockWindowUpdate pour définir ou effacer un verrou de mise à jour de fenêtre, en spécifiant la fenêtre à verrouiller. Le verrou s’applique à la fenêtre spécifiée et à toutes ses fenêtres enfants. Lorsque le verrou est défini, les fonctions GetDC et BeginPaint retournent un contexte d’appareil d’affichage avec une région visible vide. Étant donné cela, l’application peut continuer à dessiner dans la fenêtre, mais toute la sortie est clippée. Le verrou persiste jusqu’à ce que l’application l’efface en appelant LockWindowUpdate, en spécifiant NULL pour la fenêtre. Bien que LockWindowUpdate force la zone visible d’une fenêtre à être vide, la fonction ne rend pas la fenêtre spécifiée invisible et ne efface pas le bit de style WS_VISIBLE.

Une fois le verrou défini, l’application peut utiliser la fonctionGetDCEx, avec la valeur DCX_LOCKWINDOWUPDATE, pour récupérer un contexte d’appareil d’affichage à dessiner sur la fenêtre verrouillée. Cela permet à l’application de dessiner un rectangle de suivi lors du traitement des messages clavier ou souris. Le système utilise cette méthode lorsque l’utilisateur déplace et dimensionne les fenêtres. GetDCEx récupère le contexte de l’appareil d’affichage à partir du cache de contexte de l’appareil d’affichage. L’application doit donc libérer le contexte de l’appareil dès que possible après le dessin.

Pendant qu’un verrou de mise à jour de fenêtre est défini, le système crée un rectangle englobant cumulé pour chaque fenêtre verrouillée. Lorsque le verrou est effacé, le système utilise ce rectangle englobant pour définir la région de mise à jour de la fenêtre et de ses fenêtres enfants, forçant un message de WM_PAINT éventuel. Si le rectangle englobant cumulé est vide (autrement dit, si aucun dessin n’a eu lieu pendant que le verrou a été défini), la région de mise à jour n’est pas définie.