Palette système
Le système gère une palette système pour chaque appareil qui utilise des palettes. La palette système contient les valeurs de couleur de toutes les couleurs qui peuvent actuellement être affichées ou dessinées par l’appareil. En dehors de l’affichage du contenu de la palette système, les applications ne peuvent pas accéder directement à la palette système. Au lieu de cela, le système a un contrôle total de la palette système et n’autorise l’accès qu’à l’aide de palettes logiques.
Une application peut afficher le contenu de la palette système à l’aide de la fonction GetSystemPaletteEntries . Cette fonction récupère le contenu d’une ou plusieurs entrées, jusqu’au nombre total d’entrées dans la palette système. Le total est toujours égal au nombre retourné pour la valeur SIZEPALETTE par la fonction GetDeviceCaps et est identique à la taille maximale pour une palette logique donnée.
Bien que les applications ne puissent pas modifier directement les couleurs de la palette système, elles peuvent entraîner des modifications lors de la réalisation de palettes logiques. Pour réaliser une palette, le système examine chaque couleur demandée et tente de trouver une entrée dans la palette système qui contient une correspondance exacte. Si le système trouve une couleur correspondante, il mappe l’index de palette logique à l’index de palette système correspondant. Si le système ne trouve pas de correspondance exacte, il copie la couleur demandée dans une entrée de palette système inutilisée avant de mapper les index. Si toutes les entrées de palette système sont utilisées, le système mappe l’index de palette logique à l’entrée de palette système dont la couleur correspond le plus étroitement à la couleur demandée. Une fois ce mappage défini, les applications ne peuvent pas le remplacer. Par exemple, les applications ne peuvent pas utiliser d’index de palette système pour spécifier des couleurs ; seuls les index de palette logique sont autorisés.
Les applications peuvent modifier la façon dont les index sont mappés en définissant le membre peFlags de la structure PALETTEENTRY sur les valeurs sélectionnées lors de la création de la palette logique. Par exemple, l’indicateur PC_NOCOLLAPSE indique au système de copier immédiatement la couleur demandée dans une entrée de palette système inutilisée, qu’une entrée de palette système contienne ou non cette couleur. En outre, l’indicateur PC_EXPLICIT indique au système de mapper l’index de palette logique à un index de palette système explicitement donné. (L’application fournit l’index de palette système dans le mot d’ordre inférieur de la structure PALETTEENTRY .)
Les palettes peuvent être réalisées sous la forme d’une palette d’arrière-plan ou d’une palette de premier plan en spécifiant respectivement TRUE ou FALSE pour le paramètre bForceBackground dans la fonction SelectPalette . Il ne peut y avoir qu’une seule palette de premier plan dans le système à la fois. Si la fenêtre est la fenêtre active ou un descendant de la fenêtre active, elle peut réaliser une palette de premier plan. Sinon, la palette est réalisée en tant que palette d’arrière-plan, quelle que soit la valeur du paramètre bForceBackground . La propriété critique d’une palette de premier plan est qu’une fois réalisée, elle peut remplacer toutes les entrées (à l’exception des entrées statiques) dans la palette système. Pour ce faire, le système marque toutes les entrées qui ne sont pas statiques dans la palette système comme étant inutilisées avant la réalisation d’une palette de premier plan, éliminant ainsi toutes les entrées utilisées. Aucun prétraitement ne se produit sur la palette système pour une réalisation de palette d’arrière-plan. La palette de premier plan définit toutes les couleurs non statiques possibles. Les palettes d’arrière-plan peuvent définir uniquement ce qui reste ouvert et sont hiérarchisées de manière à ce que le premier arrivé, premier servi. En règle générale, les applications utilisent des palettes d’arrière-plan pour les fenêtres enfants qui réalisent leurs propres palettes individuelles. Cela permet de réduire le nombre de modifications apportées à la palette système.
Une entrée de palette système inutilisée est toute entrée qui n’est pas réservée et ne contient pas de couleur statique. Les entrées réservées sont explicitement marquées avec la valeur PC_RESERVED. Ces entrées sont créées lorsqu’une application réalise une palette logique pour l’animation de palette. Les entrées de couleur statiques sont créées par le système et correspondent aux couleurs de la palette par défaut. La fonction GetDeviceCaps peut être utilisée pour récupérer la valeur NUMRESERVED, qui spécifie le nombre d’entrées de palette système réservées aux couleurs statiques.
Étant donné que la palette système a un nombre limité d’entrées, la sélection et la réalisation d’une palette logique pour un appareil donné peuvent affecter les couleurs associées à d’autres palettes logiques pour le même appareil. Ces changements de couleur sont particulièrement spectaculaires lorsqu’ils se produisent à l’écran. Une application peut s’assurer que des couleurs raisonnables sont utilisées pour sa palette logique actuellement sélectionnée en réinitialisant la palette avant chaque utilisation. Une application réinitialise la palette en appelant les fonctions UnrealizeObject et RealizePalette . L’utilisation de ces fonctions permet au système de remapper les couleurs de la palette logique en couleurs raisonnables dans la palette système.