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 WM_PAINT messages 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’elle définit la région de mise à jour de la fenêtre parente, ce qui entraîne la réception de WM_PAINT messages lorsque la fenêtre parente les reçoit. Le système limite l’emplacement de la zone visible de la fenêtre enfant à l’intérieur de la zone cliente de la fenêtre parente et extrait n’importe quelle 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 d’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 envoie un message à la fenêtre enfant, ce qui permet à l’enfant de restaurer toutes les parties de la fenêtre sur laquelle le parent peut avoir été dessiné.
Le système ne définit pas la région de mise à jour du parent lorsque l’enfant est défini. 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 fenêtre ne reçoit un message WM_PAINT.
Une application peut empêcher la définition de la région de mise à jour d’une fenêtre enfant lorsque 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 rogné, ce qui rend un message de WM_PAINT ultérieur à la fenêtre enfant inutile.
Les régions de mise à jour et visibles d’une fenêtre enfant sont également affectées par les frères 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 pour une autre 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 (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. Étant donné cela, la fenêtre la plus élevée dans l’ordre Z (en haut) reçoit son message WM_PAINT dernier, et vice versa. 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 l’empêcher 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 chevauchent à partir de la région visible d’une fenêtre si la fenêtre frère qui se chevauche a une position plus élevée dans l’ordre Z.
Note
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.