Paleta lógica

Una paleta lógica es una paleta de colores que una aplicación crea y asocia con un contexto de dispositivo determinado. Las paletas lógicas permiten a las aplicaciones definir y usar colores que satisfagan sus necesidades específicas. Las aplicaciones pueden crear cualquier número de paletas lógicas, usarlas para contextos de dispositivo independientes o cambiar entre ellas para un único contexto de dispositivo. El número máximo de paletas que una aplicación puede crear depende de los recursos del sistema.

Una aplicación crea una paleta lógica mediante la función CreatePalette . La aplicación rellena una estructura LOGPALETTE , que especifica el número de entradas y los valores de color de cada entrada y, a continuación, la aplicación pasa la estructura a CreatePalette. La función devuelve un identificador de paleta que la aplicación usa en todas las operaciones posteriores para identificar la paleta. Para usar colores en la paleta lógica, la aplicación selecciona la paleta en un contexto de dispositivo mediante la función SelectPalette y, a continuación, realiza la paleta mediante la función RealizePalette . Los colores de la paleta están disponibles en cuanto se realiza la paleta lógica.

Una aplicación debe limitar el tamaño de sus paletas lógicas a solo suficientes entradas para representar los colores necesarios. Las aplicaciones no pueden crear paletas lógicas mayores que el tamaño máximo de la paleta, un valor dependiente del dispositivo. Las aplicaciones pueden obtener el tamaño máximo mediante la función GetDeviceCaps para recuperar el valor SIZEPALETTE.

Aunque una aplicación puede especificar cualquier valor de color para una entrada determinada en una paleta lógica, el dispositivo determinado no puede generar todos los colores. El sistema no proporciona una manera de detectar qué colores se admiten, pero la aplicación puede detectar el número total de estos colores recuperando la resolución de colores del dispositivo. La resolución de color, especificada en bits de color por píxel, es igual al valor COLORRES devuelto por la función GetDeviceCaps . Un dispositivo que tiene una resolución de color de 18 tiene 262.144 colores posibles. Si una aplicación solicita un color que no se admite, el sistema elige una aproximación adecuada.

Una vez creada una paleta lógica, una aplicación puede cambiar los colores de la paleta mediante la función SetPaletteEntries . Si se ha seleccionado y realizado la paleta lógica, cambiar la paleta no afecta inmediatamente a los colores que se muestran. La aplicación debe usar las funciones UnrealizeObject y RealizePalette para actualizar los colores. En algunos casos, es posible que la aplicación tenga que anular la selección, realizar, seleccionar y darse cuenta de la paleta lógica para asegurarse de que los colores se actualizan exactamente como se solicita. Si una aplicación selecciona una paleta lógica en más de un contexto de dispositivo, los cambios en la paleta lógica afectan a todos los contextos de dispositivo para los que está seleccionado.

Una aplicación puede cambiar el número de entradas de una paleta lógica mediante la función ResizePalette . Si la aplicación reduce el tamaño, las entradas restantes no se modifican. Si la aplicación extiende el tamaño, el sistema establece el color de cada nueva entrada en negro (0, 0, 0) y la marca en cero.

Una aplicación puede recuperar los valores de color y marca de las entradas de una paleta lógica determinada mediante la función GetPaletteEntries . Una aplicación puede recuperar el índice de la entrada en una paleta lógica determinada que coincida más estrechamente con un valor de color especificado mediante la función GetNearestPaletteIndex .

Cuando una aplicación ya no necesita una paleta lógica, puede eliminarla mediante la función DeleteObject . La aplicación debe asegurarse de que la paleta lógica ya no está seleccionada en un contexto de dispositivo antes de eliminar la paleta.