Compartilhar via


Paleta do Sistema

O sistema mantém uma paleta do sistema para cada dispositivo que usa paletas. A paleta do sistema contém os valores de cor para todas as cores que atualmente podem ser exibidas ou desenhadas pelo dispositivo. Além de exibir o conteúdo da paleta do sistema, os aplicativos não podem acessar a paleta do sistema diretamente. Em vez disso, o sistema tem controle completo da paleta do sistema e permite o acesso somente por meio do uso de paletas lógicas.

Um aplicativo pode exibir o conteúdo da paleta do sistema usando a função GetSystemPaletteEntries . Essa função recupera o conteúdo de uma ou mais entradas, até o número total de entradas na paleta do sistema. O total é sempre igual ao número retornado para o valor SIZEPALETTE pela função GetDeviceCaps e é o mesmo que o tamanho máximo para qualquer paleta lógica específica.

Embora os aplicativos não possam alterar as cores diretamente na paleta do sistema, eles podem causar alterações ao perceber paletas lógicas. Para realizar uma paleta, o sistema examina cada cor solicitada e tenta encontrar uma entrada na paleta do sistema que contém uma correspondência exata. Se o sistema encontrar uma cor correspondente, ele mapeará o índice de paleta lógica para o índice de paleta do sistema correspondente. Se o sistema não encontrar uma correspondência exata, ele copiará a cor solicitada para uma entrada de paleta do sistema não utilizada antes de mapear os índices. Se todas as entradas da paleta do sistema estiverem em uso, o sistema mapeará o índice de paleta lógica para a entrada da paleta do sistema cuja cor corresponde mais de perto à cor solicitada. Depois que esse mapeamento for definido, os aplicativos não poderão substituí-lo. Por exemplo, os aplicativos não podem usar índices de paleta do sistema para especificar cores; somente índices de paleta lógica são permitidos.

Os aplicativos podem modificar a maneira como os índices são mapeados definindo o membro peFlags da estrutura PALETTEENTRY para valores selecionados ao criar a paleta lógica. Por exemplo, o sinalizador PC_NOCOLLAPSE direciona o sistema para copiar imediatamente a cor solicitada para uma entrada de paleta do sistema não utilizada, independentemente de uma entrada de paleta do sistema já contiver essa cor. Além disso, o sinalizador PC_EXPLICIT direciona o sistema para mapear o índice de paleta lógica para um índice de paleta do sistema explicitamente fornecido. (O aplicativo fornece o índice de paleta do sistema na palavra de baixa ordem da estrutura PALETTEENTRY .)

As paletas podem ser realizadas como uma paleta de plano de fundo ou uma paleta de primeiro plano especificando TRUE ou FALSE , respectivamente, para o parâmetro bForceBackground na função SelectPalette . Pode haver apenas uma paleta de primeiro plano no sistema por vez. Se a janela for a janela ativa no momento ou um descendente da janela ativa no momento, ela poderá realizar uma paleta de primeiro plano. Caso contrário, a paleta será realizada como uma paleta de plano de fundo, independentemente do valor do parâmetro bForceBackground . A propriedade crítica de uma paleta de primeiro plano é que, quando realizada, ela pode substituir todas as entradas (exceto as entradas estáticas) na paleta do sistema. O sistema faz isso marcando todas as entradas que não são estáticas na paleta do sistema como não utilizadas antes da realização de uma paleta de primeiro plano, eliminando assim todas as entradas usadas. Nenhum pré-processamento ocorre na paleta do sistema para uma realização de paleta de plano de fundo. A paleta de primeiro plano define todas as cores não estáticas possíveis. As paletas de plano de fundo podem definir apenas o que permanece aberto e são priorizados por 1 a 0. Normalmente, os aplicativos usam paletas de plano de fundo para janelas filho que percebem suas próprias paletas individuais. Isso ajuda a minimizar o número de alterações que ocorrem na paleta do sistema.

Uma entrada de paleta do sistema não utilizada é qualquer entrada que não seja reservada e não contenha uma cor estática. As entradas reservadas são explicitamente marcadas com o valor PC_RESERVED. Essas entradas são criadas quando um aplicativo percebe uma paleta lógica para animação de paleta. Entradas de cor estática são criadas pelo sistema e correspondem às cores na paleta padrão. A função GetDeviceCaps pode ser usada para recuperar o valor NUMRESERVED, que especifica o número de entradas de paleta do sistema reservadas para cores estáticas.

Como a paleta do sistema tem um número limitado de entradas, selecionar e perceber uma paleta lógica para um determinado dispositivo pode afetar as cores associadas a outras paletas lógicas para o mesmo dispositivo. Essas alterações de cor são especialmente dramáticas quando ocorrem na tela. Um aplicativo pode garantir que cores razoáveis sejam usadas para sua paleta lógica selecionada no momento redefinindo a paleta antes de cada uso. Um aplicativo redefine a paleta chamando as funções UnrealizeObject e RealizePalette . O uso dessas funções faz com que o sistema remapee as cores na paleta lógica para cores razoáveis na paleta do sistema.