Paleta lógica
Um de paleta lógica é uma paleta de cores que um aplicativo cria e associa a um determinado contexto de dispositivo. As paletas lógicas permitem que os aplicativos definam e usem cores que atendam às suas necessidades específicas. Os aplicativos podem criar qualquer número de paletas lógicas, usando-as para contextos de dispositivo separados ou alternando entre elas para um contexto de dispositivo único. O número máximo de paletas que um aplicativo pode criar depende dos recursos do sistema.
Um aplicativo cria uma paleta lógica usando a funçãoCreatePalette. O aplicativo preenche uma estrutura de LOGPALETTE, que especifica o número de entradas e os valores de cor para cada entrada e, em seguida, o aplicativo passa a estrutura para CreatePalette. A função retorna um identificador de paleta que o aplicativo usa em todas as operações subsequentes para identificar a paleta. Para usar cores na paleta lógica, o aplicativo seleciona a paleta em um contexto de dispositivo usando a função SelectPalette e, em seguida, realiza a paleta usando a funçãoRealizePalette. As cores na paleta estão disponíveis assim que a paleta lógica é realizada.
Um aplicativo deve limitar o tamanho de suas paletas lógicas a apenas entradas suficientes para representar as cores necessárias. Os aplicativos não podem criar paletas lógicas maiores do que o tamanho máximo da paleta, um valor dependente do dispositivo. Os aplicativos podem obter o tamanho máximo usando a função GetDeviceCaps para recuperar o valor SIZEPALETTE.
Embora um aplicativo possa especificar qualquer valor de cor para uma determinada entrada em uma paleta lógica, nem todas as cores podem ser geradas pelo dispositivo determinado. O sistema não fornece uma maneira de descobrir quais cores são suportadas, mas o aplicativo pode descobrir o número total dessas cores recuperando a resolução de cores do dispositivo. A resolução de cores, especificada em bits de cor por pixel, é igual ao valor COLORRES retornado pela funçãoGetDeviceCaps. Um dispositivo que tem uma resolução de cores de 18 tem 262.144 cores possíveis. Se um aplicativo solicitar uma cor que não é suportada, o sistema escolhe uma aproximação apropriada.
Depois que uma paleta lógica é criada, um aplicativo pode alterar as cores na paleta usando a funçãoSetPaletteEntries. Se a paleta lógica tiver sido selecionada e realizada, alterar a paleta não afetará imediatamente as cores que estão sendo exibidas. O aplicativo deve usar o UnrealizeObject e funções RealizePalette para atualizar as cores. Em alguns casos, o aplicativo pode precisar desmarcar, desperceber, selecionar e realizar a paleta lógica para garantir que as cores sejam atualizadas exatamente como solicitado. Se um aplicativo selecionar uma paleta lógica em mais de um contexto de dispositivo, as alterações na paleta lógica afetarão todos os contextos de dispositivo para os quais ela foi selecionada.
Um aplicativo pode alterar o número de entradas em uma paleta lógica usando a funçãoResizePalette. Se o aplicativo reduzir o tamanho, as entradas restantes permanecerão inalteradas. Se o aplicativo estender o tamanho, o sistema define a cor para cada nova entrada para preto (0, 0, 0) e a bandeira para zero.
Um aplicativo pode recuperar os valores de cor e sinalizador para entradas em uma determinada paleta lógica usando a funçãoGetPaletteEntries. Um aplicativo pode recuperar o índice para a entrada em uma determinada paleta lógica que mais se aproxima de um valor de cor especificado usando o função GetNearestPaletteIndex.
Quando um aplicativo não precisa mais de uma paleta lógica, ele pode excluí-lo usando a função DeleteObject. O aplicativo deve certificar-se de que a paleta lógica não está mais selecionada em um contexto de dispositivo antes de excluir a paleta.