Palette système
Le système gère une palette de systèmes 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. Outre 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 autorise l’accès uniquement via l’utilisation 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 toute 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 la remplacer. Par exemple, les applications ne peuvent pas utiliser des 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 les peFlags membre 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 dirige le système pour copier immédiatement la couleur demandée dans une entrée de palette système inutilisée, que l’entrée de palette système contienne déjà cette couleur. En outre, l’indicateur PC_EXPLICIT dirige le système pour mapper l’index de palette logique à un index de palette système explicitement donné. (L’application donne l’index de palette système dans le mot de bas ordre 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 TRUE ou FALSE respectivement pour le paramètre bForceBackground dans la fonctionSelectPalette. 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 une décroissante 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 que, lorsqu’elle est réalisée, elle peut remplacer toutes les entrées (à l’exception des entrées statiques) dans la palette système. Le système effectue cette opération en marquant toutes les entrées qui ne sont pas statiques dans la palette système comme 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 classées par ordre de priorité de première venue. 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 qui se produisent dans la palette système.
Une entrée de palette système inutilisée est une 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 comporte 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 sur l’écran. Une application peut s’assurer que les 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 remappper les couleurs de la palette logique en couleurs raisonnables dans la palette système.