Verrou 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 si elles 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 de périphérique d’affichage avec une région visible vide. Dans ce cas, l’application peut continuer à dessiner dans la fenêtre, mais toute la sortie est coupé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 n’efface pas le bit de style WS_VISIBLE.
Une fois le verrou défini, l’application peut utiliser la fonction GetDCEx , avec la valeur DCX_LOCKWINDOWUPDATE, pour récupérer un contexte de périphérique d’affichage à dessiner sur la fenêtre verrouillée. Cela permet à l’application de dessiner un rectangle de suivi lors du traitement des messages au clavier ou à la souris. Le système utilise cette méthode lorsque l’utilisateur déplace et dimensionne des fenêtres. GetDCEx récupère le contexte du périphérique d’affichage à partir du cache de contexte de périphérique d’affichage, de sorte que l’application doit libérer le contexte de l’appareil dès que possible après le dessin.
Lorsqu’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, en forçant un message WM_PAINT éventuel. Si le rectangle englobant cumulé est vide (autrement dit, si aucun dessin n’a eu lieu pendant la définition du verrou), la région de mise à jour n’est pas définie.