Messages de palette

Les modifications apportées à la palette système pour le périphérique d’affichage peuvent avoir des effets spectaculaires et parfois indésirables sur les couleurs utilisées dans Windows sur le bureau. Pour réduire l’impact de ces modifications, le système fournit un ensemble de messages qui permettent aux applications de gérer leurs palettes logiques tout en veillant à ce que les couleurs de la fenêtre active soient aussi proches que possible des couleurs prévues.

Le système envoie un message WM _ QUERYNEWPALETTE à une fenêtre de niveau supérieur ou Overlapped juste avant d’activer la fenêtre. Ce message donne à une application la possibilité de sélectionner et de réaliser sa palette logique afin qu’elle reçoive le meilleur mappage possible des couleurs pour sa palette logique. Lorsque l’application reçoit le message, elle doit utiliser les fonctions SelectPalette, UnrealizeObjectet RealizePalette pour sélectionner et réaliser la palette logique. Cela permet au système de mettre à jour les couleurs de la palette système de sorte que ses couleurs correspondent autant de couleurs que possible dans la palette logique.

Lorsqu’une application entraîne des modifications de la palette système suite à la réalisation de sa palette logique, le système envoie un message WM _ PALETTECHANGED à toutes les fenêtres superposées et de niveau supérieur. Ce message donne aux applications la possibilité de mettre à jour les couleurs des zones clientes de leurs fenêtres, en remplaçant les couleurs qui ont changé par des couleurs qui correspondent davantage aux couleurs prévues. Une application qui reçoit le message WM _ PALETTECHANGED doit utiliser UnrealizeObject et RealizePalette pour réinitialiser les palettes logiques associées à toutes les fenêtres inactives, puis mettre à jour les couleurs dans la zone cliente pour chaque fenêtre inactive à l’aide de la fonction UpdateColors . Cette technique ne garantit pas le plus grand nombre de correspondances de couleurs exactes. Toutefois, cela permet de s’assurer que les couleurs de la palette logique sont mappées à des couleurs raisonnables dans la palette du système.

Notes

Pour éviter de créer une boucle infinie, une application ne doit jamais se rendre compte de la palette de la fenêtre dont le descripteur correspond au descripteur passé dans le paramètre wParam du message WM _ PALETTECHANGED .

La fonction UpdateColors met généralement à jour une zone cliente d’une fenêtre inactive plus rapidement que le rafraîchissement de la zone. Toutefois, étant donné que UpdateColors effectue la traduction des couleurs en fonction de la couleur de chaque pixel avant la modification de la palette du système, chaque appel à cette fonction entraîne une perte de précision de la couleur. Cela signifie que UpdateColors ne peut pas être utilisé pour mettre à jour les couleurs quand la fenêtre devient active. Dans ce cas, l’application doit redessiner la zone cliente.

Le système peut envoyer le message WM _ QUERYNEWPALETTE lorsque des modifications sont apportées à la palette logique. En outre, le système peut envoyer le message WM _ PALETTEISCHANGING à toutes les fenêtres superposées et de niveau supérieur lorsque la palette du système va être modifiée.