Région de mise à jour de fenêtre enfant
Une fenêtre enfant est une fenêtre avec le style WS_CHILD ou WS_CHILDWINDOW. Comme d’autres styles de fenêtre, les fenêtres enfants reçoivent des messages WM_PAINT pour inviter la mise à jour. Chaque fenêtre enfant a une région de mise à jour, que le système ou l’application peut définir pour générer des messages WM_PAINT éventuels.
La mise à jour et les régions visibles d’une fenêtre enfant sont affectées par la fenêtre parente de l’enfant ; cela n’est pas vrai pour les fenêtres d’autres styles. Le système définit souvent la région de mise à jour de la fenêtre enfant lorsqu’il définit la région de mise à jour de la fenêtre parente, ce qui fait que la fenêtre enfant reçoit WM_PAINT messages lorsque la fenêtre parente les reçoit. Le système limite l’emplacement de la région visible de la fenêtre enfant à l’intérieur de la zone cliente de la fenêtre parente et extrait toute partie de la fenêtre enfant déplacée en dehors de la fenêtre parente.
Le système définit la région de mise à jour pour une fenêtre enfant chaque fois qu’une partie de la région de mise à jour de la fenêtre parente inclut une partie de la fenêtre enfant. Dans ce cas, le système envoie d’abord un message WM_PAINT à la fenêtre parente, puis un message à la fenêtre enfant, ce qui permet à l’enfant de restaurer toutes les parties de la fenêtre que le parent a pu dessiner.
Le système ne définit pas la région de mise à jour du parent lorsque celle de l’enfant est définie. Une application ne peut pas générer un message WM_PAINT pour la fenêtre parente en invalidant la fenêtre enfant. De même, une application ne peut pas générer un message WM_PAINT pour l’enfant en invalidant une partie de la zone cliente du parent qui se trouve entièrement sous la fenêtre enfant. Dans ce cas, aucune des fenêtres ne reçoit de message WM_PAINT .
Une application peut empêcher la région de mise à jour d’une fenêtre enfant d’être définie lorsque celle de la fenêtre parente est définie en spécifiant le style WS_CLIPCHILDREN lors de la création de la fenêtre parente. Lorsque ce style est défini, le système exclut les fenêtres enfants de la région visible du parent et ignore donc toute partie de la région de mise à jour qui peut contenir les fenêtres enfants. Lorsque l’application peint dans la fenêtre parente, tout dessin qui couvrirait la fenêtre enfant est clippé, ce qui rend inutile un message WM_PAINT ultérieur à la fenêtre enfant.
La mise à jour et les régions visibles d’une fenêtre enfant sont également affectées par les frères et sœurs de la fenêtre enfant. Les fenêtres frères sont toutes les fenêtres qui ont une fenêtre parente commune. Si les fenêtres frères se chevauchent, la définition de la région de mise à jour de l’une affecte la région de mise à jour d’une autre, ce qui entraîne l’envoi de messages WM_PAINT aux deux fenêtres. Si une fenêtre de la chaîne parente est composite (une fenêtre avec WX_EX_COMPOSITED), les fenêtres frères reçoivent WM_PAINT messages dans l’ordre inverse de leur position dans l’ordre Z. Dans ce cas, la fenêtre la plus haute dans l’ordre Z (en haut) reçoit son WM_PAINT message en dernier, et inversement. Si une fenêtre de la chaîne parente n’est pas composite, les fenêtres frères reçoivent WM_PAINT messages dans l’ordre Z.
Les fenêtres frères ne sont pas automatiquement clippées. Un frère peut dessiner sur un autre frère qui se chevauche même si la fenêtre qui dessine a une position inférieure dans l’ordre Z. Une application peut empêcher cela en spécifiant le style WS_CLIPSIBLINGS lors de la création des fenêtres. Lorsque ce style est défini, le système exclut toutes les parties d’une fenêtre frère qui se chevauche de la région visible d’une fenêtre si la fenêtre sœur qui se chevauche a une position plus élevée dans l’ordre Z.
Notes
Les régions de mise à jour et visibles pour les fenêtres qui ont le style WS_POPUP ou WS_POPUPWINDOW ne sont pas affectées par leurs fenêtres parentes.