Compartilhar via


Paleta do Sistema

O sistema mantém uma paleta de sistema para cada dispositivo que usa paletas. A paleta do sistema contém os valores de cores 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 diretamente a paleta do sistema. 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 fornecida.

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 de paleta do sistema estiverem em uso, o sistema mapeará o índice de paleta lógica para a entrada de 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 peFlags membro da estruturaPALETTEENTRY para valores selecionados ao criar a paleta lógica. Por exemplo, o sinalizador PC_NOCOLLAPSE orienta o sistema a 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 de 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 planos de fundo ou uma paleta de primeiro plano especificando verdadeiro ou FALSE, respectivamente, para o parâmetro bForceBackground na funçãoSelectPalette. Pode haver apenas uma paleta de primeiro plano no sistema de cada vez. Se a janela for a janela ativa no momento ou um descendente da janela ativa atualmente, ela poderá realizar uma paleta de primeiro plano. Caso contrário, a paleta será realizada como uma paleta de planos 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 planos de fundo. A paleta de primeiro plano define todas as cores não estáticas possíveis. As paletas de planos de fundo podem definir apenas o que permanece aberto e são priorizados por várias etapas. Normalmente, os aplicativos usam paletas de planos de fundo para janelas filho que realizam 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 de sistema não utilizada é qualquer entrada que não esteja reservada e não contenha uma cor estática. As entradas reservadas são marcadas explicitamente com o valor PC_RESERVED. Essas entradas são criadas quando um aplicativo realiza uma paleta lógica para animação de paleta. Entradas de cores estáticas 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 exibição. 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. Usar essas funções faz com que o sistema remapee as cores na paleta lógica para cores razoáveis na paleta do sistema.