|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
System Palette
Windows maintains a system palette for each device that uses palettes. The system palette contains the color values for all colors that can currently be displayed or drawn by the device. Other than viewing the contents of the system palette, applications cannot access the system palette directly. Instead, Windows has complete control of the system palette and permits access only through the use of logical palettes.
An application can view the contents of the system palette by using the GetSystemPaletteEntries function. This function retrieves the contents of one or more entries, up to the total number of entries in the system palette. The total is always equal to the number returned for the SIZEPALETTE value by the GetDeviceCaps function and is the same as the maximum size for any given logical palette. Although applications cannot change colors in the system palette directly, they may cause changes when realizing logical palettes. To realize a palette, Windows examines each requested color and attempts to find an entry in the system palette that contains an exact match. If Windows finds a matching color, it maps the logical palette index to the corresponding system palette index. If Windows does not find an exact match, it copies the requested color to an unused system palette entry before mapping the indices. If all system palette entries are in use, Windows maps the logical palette index to the system palette entry whose color most closely matches the requested color. Once this mapping is set, applications cannot override it. For example, applications cannot use system palette indices to specify colors; only logical palette indices are permitted.
Applications can modify the way indices are mapped by setting the peFlags member of the PALETTEENTRY structure to selected values when creating the logical palette. For example, the PC_NOCOLLAPSE flag directs Windows to immediately copy the requested color to an unused system palette entry regardless of whether a system palette entry already contains that color. Also, the PC_EXPLICIT flag directs Windows to map the logical palette index to an explicitly given system palette index. (The application gives the system palette index in the low-order word of the PALETTEENTRY structure.)
Palettes can be realized as either a background palette or a foreground palette by specifying TRUE or FALSE respectively for the bForceBackground parameter in the SelectPalette function. There can be only one foreground palette in the system at a time. If the window is the currently active window or a descendent of the currently active window, it can realize a foreground palette. Otherwise the palette is realized as a background palette regardless of the value of the bForceBackground parameter. The critical property of a foreground palette is that, when realized, it can overwrite all entries (except for the static entries) in the system palette. Windows accomplishes this by marking all of the entries that are not static in the system palette as unused before the realization of a foreground palette, thereby eliminating all of the used entries. No preprocessing occurs on the system palette for a background palette realization. The foreground palette sets all of the possible nonstatic colors. Background palettes can set only what remains open and are prioritized in a first-come, first-serve manner. Typically, applications use background palettes for child windows which realize their own individual palettes. This helps minimize the number of changes that occur to the system palette.
An unused system palette entry is any entry that is not reserved and does not contain a static color. Reserved entries are explicitly marked with the PC_RESERVED value. These entries are created when an application realizes a logical palette for palette animation. Static color entries are created by Windows and correspond to the colors in the default palette. The GetDeviceCaps function can be used to retrieve the NUMRESERVED value, which specifies the number of system palette entries reserved for static colors.
Because the system palette has a limited number of entries, selecting and realizing a logical palette for a given device may affect the colors associated with other logical palettes for the same device. These color changes are especially dramatic when they occur on the display. An application can make sure that reasonable colors are used for its currently selected logical palette by resetting the palette before each use. An application resets the palette by calling the UnrealizeObject and RealizePalette functions. Using these functions causes Windows to remap the colors in the logical palette to reasonable colors in the system palette.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Системная Палитра
Окно поддерживает системную палитру для каждого устройства, которое использует палитры. Системная палитра содержит цветные величины для всех цветов, которые могут к настоящему времени отображены или сделанным устройством. Кроме просмотра содержания системной палитры, приложения не могут иметь доступ к системной палитре непосредственно. Взамен, Окно имеет полное управление системной палитрой и доступом разрешений только с помощью логических палитр.
Приложение может рассмотреть содержание системной палитры используя функцию GetSystemPaletteEntries. Эта функция извлекает содержание одного или более данных, вплоть до общего числа данных в системной палитре. Итог всегда равный числу возвращанному для величины SIZEPALETTE функцией GetDeviceCaps и такой же как и максимальный размер для любой данной логической палитры. Хотя приложения не могут изменить цвета в системной палитре непосредственно, они могут вызвать изменения реализовывая логические палитры. Для того, чтобы реализовывать палитру, проверки Окна каждый попросивший цвет и попытки, чтобы находить вход в системной палитре, которая содержит точную спичку. Если Окно находит сопоставление цвета, оно отображает логический индекс палитры в соответствующий системный индекс палитры. Если Окно не находит точную спичку, это копирует попрошенный цвет на неиспользованный системный вход палитры перед распределением индексов. Если все системные данные палитры используются, Окно отображает логический индекс палитры на системный вход палитры чей цвет наиболее тесно соответствует попрошенному цвету. Как только это распределение установлено, приложения не могут аннулировать это. Например, приложения не могут использовать системные индексы палитры, чтобы определять цвета; только логические индексы палитры разрешены.
Приложения могут модифицировать индексы пути отображены установкой члена peFlags структуры PALETTEENTRY на выбравшееся величины при создании логической палитры. Например, прямое Окно флага PC_NOCOLLAPSE, чтобы немедленно копировать попрошенный цвет на неиспользованный системный вход палитры независимо от того, что системный вход палитры уже содержит этот цвет. Также, флаг PC_EXPLICIT направляет Окно, чтобы отображать логический индекс палитры в явно данный системный индекс палитры. ( Приложение дает системный индекс палитры в младшем слове PALETTEENTRY structure.)
Палитры могут быть реализованы как или палитра фона или палитра переднего плана определяя ИСТИНУ или ЛОЖЬ соответственно для параметра bForceBackground в функции SelectPalette. Может быть только одной палитрой переднего плана в системе за один раз. Если окно - к настоящему времени активное окно или descendent к настоящему времени активного окна, оно может реализовать палитру переднего плана. В противном случае палитра реализована как палитра фона независимо от величины параметра bForceBackground. Критическая собственность палитры переднего плана в том, что когда реализовано, это может перезаписать все данные (за исключением статических данных) в системной палитре. Окно выполняет это выделяя все данные, которые не статические в системной палитре как неиспользованный перед реализацией палитры переднего плана, этим самым устраняя все использовавшее данные. Никакая предварительная обработка не происходит в системной палитре для реализации палитры фона. Палитра переднего плана устанавливает все возможные nonstatic цвета. Палитры Фона могут установить только какие остатки открытые и получены приоритет в сначала-приходить, сначала-обслуживать способ. Обычно, приложения используют палитры фона для окна ребенка, которое реализовывает свои собственные индивидуальные палитры. Это помогает минимизировать количество изменений, которые происходят в системную палитру.
Неиспользованный системный вход палитры является любым входом, что не зарезервирован и не содержался статический цвет. Резервные данные явно выделены величиной PC_RESERVED. Эти данные созданы когда приложение реализовывает логическую палитру для оживления палитры. Статические цветные данные созданы Окном и переписывались в цвета во встроенной палитре. Функция GetDeviceCaps может быть использована, чтобы извлекать величину NUMRESERVED, которая определяет номер системных данных палитры зарезервированной для статических цветов.
Поскольку системная палитра имеет ограниченный номер данных, выбирающихся и реализовывая логическую палитру для данного устройства может повлиять на цвета связанные другими логическими палитрами для того же устройства. Эти окрашивают изменения особенно драматические когда они происходят в показе. Приложение может убедиться, что разумные цвета использованы для своей к настоящему времени выбранной логической палитры восстанавливая палитру перед каждым использованием. Приложение восстанавливает палитру вызывая UnrealizeObject и функции RealizePalette. Используя это Окно причин функций, чтобы remap цвета в логическую палитру в разумные цвета в системной палитре.
|
|
|
|
| |