Udostępnij za pośrednictwem


Paleta logiczna

Paleta logiczna to paleta kolorów, którą aplikacja tworzy i kojarzy z danym kontekstem urządzenia. Palety logiczne umożliwiają aplikacjom definiowanie i używanie kolorów spełniających określone potrzeby. Aplikacje mogą tworzyć dowolną liczbę palet logicznych, używając ich do oddzielnych kontekstów urządzeń lub przełączania się między nimi w ramach jednego kontekstu urządzenia. Maksymalna liczba palet, które może utworzyć aplikacja, zależy od zasobów systemu.

Aplikacja tworzy paletę logiczną przy użyciu funkcji CreatePalette. Aplikacja wypełnia strukturę LOGPALETTE, która określa liczbę wpisów i wartości kolorów dla każdego wpisu, a następnie aplikacja przekazuje strukturę do CreatePalette. Funkcja zwraca uchwyt palety używany przez aplikację we wszystkich kolejnych operacjach w celu zidentyfikowania palety. Aby użyć kolorów w palecie logicznej, aplikacja wybiera paletę w kontekście urządzenia przy użyciu funkcji SelectPalette, a następnie realizuje paletę przy użyciu funkcji RealizePalette. Kolory w palecie są dostępne zaraz po osiągnięciu palety logicznej.

Aplikacja powinna ograniczyć rozmiar palet logicznych do wystarczającej liczby wpisów, aby reprezentować potrzebne kolory. Aplikacje nie mogą tworzyć palet logicznych większych niż maksymalny rozmiar palety, czyli wartość zależna od urządzenia. Aplikacje mogą uzyskać maksymalny rozmiar przy użyciu funkcji GetDeviceCaps w celu pobrania wartości SIZEPALETTE.

Mimo że aplikacja może określić dowolną wartość koloru dla danego wpisu w palecie logicznej, nie wszystkie kolory mogą być generowane przez dane urządzenie. System nie zapewnia sposobu odnajdywania obsługiwanych kolorów, ale aplikacja może odnaleźć całkowitą liczbę tych kolorów, pobierając rozdzielczość kolorów urządzenia. Rozdzielczość kolorów określona w bitach kolorów na piksel jest równa wartości COLORRES zwróconej przez funkcję GetDeviceCaps. Urządzenie, które ma rozdzielczość kolorów 18, ma 262 144 możliwe kolory. Jeśli aplikacja żąda koloru, który nie jest obsługiwany, system wybierze odpowiednie przybliżenie.

Po utworzeniu palety logicznej aplikacja może zmieniać kolory na palecie przy użyciu funkcji SetPaletteEntries. Jeśli paleta logiczna została wybrana i zrealizowana, zmiana palety nie ma natychmiastowego wpływu na wyświetlane kolory. Aplikacja musi używać funkcji UnrealizeObject i RealizePalette, aby zaktualizować kolory. W niektórych przypadkach aplikacja może wymagać usunięcia zaznaczenia, wyrejestrowania, wybrania i realizacji palety logicznej, aby upewnić się, że kolory są aktualizowane dokładnie zgodnie z żądaniem. Jeśli aplikacja wybierze paletę logiczną w więcej niż jednym kontekście urządzenia, zmiany w palecie logicznej mają wpływ na wszystkie konteksty urządzeń, dla których jest zaznaczona.

Aplikacja może zmienić liczbę wpisów na palecie logicznej przy użyciu funkcji ResizePalette. Jeśli aplikacja zmniejszy rozmiar, pozostałe wpisy pozostaną niezmienione. Jeśli aplikacja rozszerza rozmiar, system ustawia kolor dla każdego nowego wpisu na (0, 0, 0, 0) i flagę na zero.

Aplikacja może pobrać wartości koloru i flagi dla wpisów w danej palecie logicznej przy użyciu funkcji GetPaletteEntries. Aplikacja może pobrać indeks dla wpisu w danej palecie logicznej, która najbardziej pasuje do określonej wartości koloru przy użyciu funkcji GetNearestPaletteIndex.

Gdy aplikacja nie potrzebuje już palety logicznej, może ją usunąć przy użyciu funkcji DeleteObject. Aplikacja musi upewnić się, że paleta logiczna nie jest już zaznaczona w kontekście urządzenia przed usunięciem palety.