Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das System verwaltet eine Systempalette für jedes Gerät, das Paletten verwendet. Die Systempalette enthält die Farbwerte für alle Farben, die derzeit vom Gerät angezeigt oder gezeichnet werden können. Abgesehen davon, dass der Inhalt der Systempalette angezeigt wird, können Anwendungen nicht direkt auf die Systempalette zugreifen. Stattdessen hat das System die vollständige Kontrolle über die Systempalette und ermöglicht den Zugriff nur über die Verwendung logischer Paletten.
Eine Anwendung kann den Inhalt der Systempalette mithilfe der GetSystemPaletteEntries-Funktion anzeigen. Diese Funktion ruft den Inhalt eines oder mehrerer Einträge bis zur Gesamtanzahl der Einträge in der Systempalette ab. Die Summe ist immer gleich der Zahl, die für den SIZEPALETTE-Wert durch die GetDeviceCaps--Funktion zurückgegeben wird, und entspricht der maximalen Größe für eine beliebige logische Palette.
Anwendungen können farben in der Systempalette zwar nicht direkt ändern, aber sie können änderungen verursachen, wenn logische Paletten realisiert werden. Um eine Palette zu realisieren, untersucht das System jede angeforderte Farbe und versucht, einen Eintrag in der Systempalette zu finden, der eine genaue Übereinstimmung enthält. Wenn das System eine übereinstimmende Farbe findet, wird der logische Palettenindex dem entsprechenden Systempalettenindex zugeordnet. Wenn das System keine genaue Übereinstimmung findet, kopiert es die angeforderte Farbe in einen nicht verwendeten Systempaletteneintrag, bevor die Indizes zugeordnet werden. Wenn alle Systempaletteneinträge verwendet werden, ordnet das System den logischen Palettenindex dem Systempaletteneintrag zu, dessen Farbe am ehesten mit der angeforderten Farbe übereinstimmt. Nachdem diese Zuordnung festgelegt wurde, können Anwendungen sie nicht außer Kraft setzen. Beispielsweise können Anwendungen keine Systempalettenindizes verwenden, um Farben anzugeben; Nur logische Palettenindizes sind zulässig.
Anwendungen können die Zuordnung von Indizes ändern, indem sie die peFlags Member der PALETTEENTRY- Struktur auf ausgewählte Werte festlegen, wenn sie die logische Palette erstellen. Beispielsweise leitet das PC_NOCOLLAPSE Flag das System an, die angeforderte Farbe sofort in einen nicht verwendeten Systempaletteneintrag zu kopieren, unabhängig davon, ob ein Systempaletteneintrag bereits diese Farbe enthält. Außerdem leitet das PC_EXPLICIT Flag das System an, den logischen Palettenindex einem explizit angegebenen Systempalettenindex zuzuordnen. (Die Anwendung gibt den Systempalettenindex im Wort mit niedriger Reihenfolge des PALETTEENTRY Struktur.)
Paletten können entweder als Hintergrundpalette oder Vordergrundpalette realisiert werden, indem sie TRUE- oder FALSE- bzw. für den bForceBackground Parameter in der funktion SelectPalette angeben. Es kann jeweils nur eine Vordergrundpalette im System vorhanden sein. Wenn das Fenster das derzeit aktive Fenster oder ein absteigender Teil des aktuell aktiven Fensters ist, kann es eine Vordergrundpalette realisieren. Andernfalls wird die Palette unabhängig vom Wert des bForceBackground-Parameters als Hintergrundpalette realisiert. Die kritische Eigenschaft einer Vordergrundpalette besteht darin, dass alle Einträge (mit Ausnahme der statischen Einträge) in der Systempalette überschrieben werden können. Das System erreicht dies, indem alle Einträge markiert werden, die nicht statisch in der Systempalette als nicht verwendet werden, bevor eine Vordergrundpalette realisiert wird, wodurch alle verwendeten Einträge eliminiert werden. Für die Realisierung einer Hintergrundpalette erfolgt keine Vorverarbeitung auf der Systempalette. Die Vordergrundpalette legt alle möglichen nicht statischen Farben fest. Hintergrundpaletten können nur das festlegen, was offen bleibt und auf first-come-First-Serve-Weise priorisiert werden. In der Regel verwenden Anwendungen Hintergrundpaletten für untergeordnete Fenster, die ihre eigenen individuellen Paletten realisieren. Dadurch wird die Anzahl der Änderungen minimiert, die in der Systempalette auftreten.
Ein nicht verwendeter Systempaletteneintrag ist jeder Eintrag, der nicht reserviert ist und keine statische Farbe enthält. Reservierte Einträge werden explizit mit dem PC_RESERVED Wert markiert. Diese Einträge werden erstellt, wenn eine Anwendung eine logische Palette für Palettenanimation realisiert. Statische Farbeinträge werden vom System erstellt und entsprechen den Farben in der Standardpalette. Die GetDeviceCaps--Funktion kann verwendet werden, um den NUMRESERVED-Wert abzurufen, der die Anzahl der Systempaletteneinträge angibt, die für statische Farben reserviert sind.
Da die Systempalette über eine begrenzte Anzahl von Einträgen verfügt, kann sich das Auswählen und Erkennen einer logischen Palette für ein bestimmtes Gerät auf die Farben auswirken, die anderen logischen Paletten für dasselbe Gerät zugeordnet sind. Diese Farbänderungen sind besonders dramatisch, wenn sie auf dem Display auftreten. Eine Anwendung kann sicherstellen, dass angemessene Farben für die aktuell ausgewählte logische Palette verwendet werden, indem sie die Palette vor jeder Verwendung zurücksetzen. Eine Anwendung setzt die Palette zurück, indem die funktionen Unobject und RealizePalette aufgerufen werden. Die Verwendung dieser Funktionen bewirkt, dass das System die Farben in der logischen Palette auf angemessene Farben in der Systempalette umordnet.