Partager via


Contextes de périphérique d’affichage privé

Un contexte d’appareil privé permet à une application d’éviter de récupérer et d’initialiser un contexte d’appareil d’affichage chaque fois que l’application doit dessiner dans une fenêtre. Les contextes d’appareil privé sont utiles pour les fenêtres qui nécessitent de nombreuses modifications des valeurs des attributs du contexte de l’appareil pour la préparer au dessin. Les contextes d’appareil privé réduisent le temps nécessaire à la préparation du contexte de l’appareil et, par conséquent, le temps nécessaire pour effectuer le dessin dans la fenêtre.

Une application indique au système de créer un contexte d’appareil privé pour une fenêtre en spécifiant le style CS_OWNDC dans la classe de fenêtre. Le système crée un contexte d’appareil privé unique chaque fois qu’il crée une fenêtre appartenant à la classe . Initialement, le contexte d’appareil privé a les mêmes valeurs par défaut pour les attributs qu’un contexte d’appareil commun, mais l’application peut les modifier à tout moment. Le système conserve les modifications apportées au contexte de l’appareil pendant la durée de vie de la fenêtre ou jusqu’à ce que l’application apporte des modifications supplémentaires.

Une application peut récupérer un handle dans le contexte de l’appareil privé à l’aide de la fonction GetDC à tout moment après la création de la fenêtre. L’application ne doit récupérer le handle qu’une seule fois. Par la suite, il peut conserver et utiliser le handle n’importe quel nombre de fois. Étant donné qu’un contexte d’appareil privé ne fait pas partie du cache de contexte d’appareil d’affichage, une application n’a jamais besoin de libérer le contexte de l’appareil à l’aide de la fonction ReleaseDC .

Le système ajuste automatiquement le contexte de l’appareil pour refléter les modifications apportées à la fenêtre, telles que le déplacement ou le dimensionnement. Cela garantit que toutes les fenêtres qui se chevauchent sont toujours correctement clippées . autrement dit, aucune action n’est requise par l’application pour garantir le découpage. Toutefois, le système ne révise pas le contexte de l’appareil pour inclure la région de mise à jour. Par conséquent, lors du traitement d’un message WM_PAINT , l’application doit incorporer la région de mise à jour en appelant BeginPaint ou en récupérant la région de mise à jour et en la croisant avec la région de découpage actuelle. Si l’application n’appelle pas BeginPaint, elle doit valider explicitement la région de mise à jour à l’aide de la fonction ValidateRect ou ValidateRgn . Si l’application ne valide pas la région de mise à jour, la fenêtre reçoit une série infinie de messages WM_PAINT .

Étant donné que BeginPaint masque l’insertion si une fenêtre l’affiche, une application qui appelle BeginPaint doit également appeler la fonction EndPaint pour restaurer l’insertion. EndPaint n’a aucun autre effet sur un contexte d’appareil privé.

Bien qu’un contexte d’appareil privé soit pratique à utiliser, il est gourmand en mémoire en termes de ressources système, nécessitant 800 octets ou plus à stocker. Les contextes d’appareil privé sont recommandés lorsque les considérations de performances l’emportent sur les coûts de stockage.

Le système inclut le contexte de l’appareil privé lors de l’envoi du message WM_ERASEBKGND à l’application. Les sélections actuelles du contexte de l’appareil privé, y compris le mode de mappage, sont en vigueur lorsque l’application ou le système traite ces messages. Pour éviter les effets indésirables, le système utilise des coordonnées logiques lors de l’effacement de l’arrière-plan ; Par exemple, il utilise la fonction GetClipBox pour récupérer les coordonnées logiques de la zone à effacer et passe ces coordonnées à la fonction FillRect . Les applications qui traitent ces messages peuvent utiliser des techniques similaires.

Une application peut utiliser la fonction GetDCEx pour forcer le système à retourner un contexte d’appareil commun pour la fenêtre qui a un contexte d’appareil privé. Cela est utile pour effectuer des retouches rapides sur une fenêtre sans modifier les valeurs actuelles des attributs du contexte d’appareil privé.