Compartir a través de


Cuadro de diálogo Color

Muestra un cuadro de diálogo modal que permite al usuario elegir un valor de color específico. El usuario puede elegir un color de un conjunto de paletas de colores básicas o personalizadas. Como alternativa, el usuario puede generar un valor de color modificando los valores de color RGB o matiz, saturación, luminosidad (HSL) de la interfaz de usuario del cuadro de diálogo. El cuadro de diálogo Color devuelve el valor RGB del color seleccionado por el usuario.

Para crear y mostrar un cuadro de diálogo Color , inicialice una estructura CHOOSECOLOR y pase la estructura a la función ChooseColor . Al establecer diferentes valores de parámetro para la estructura CHOOSECOLOR , puede afectar a cómo aparece el cuadro de diálogo Color. Por ejemplo, puede mostrar una versión completa o parcial de la interfaz de usuario del cuadro de diálogo. En la ilustración siguiente se muestra la versión completa de la interfaz de usuario del cuadro de diálogo Color .

cuadro de diálogo color

Si el usuario hace clic en el botón Aceptar , ChooseColor devuelve TRUE. El miembro rgbResult de la estructura CHOOSECOLOR contiene el valor de color RGB del color seleccionado por el usuario. El valor de color RGB especifica las densidades de los colores rojo, verde y azul individuales que componen el color seleccionado. Los valores individuales van de 0 a 255. Use las macros GetRValue, GetGValue y GetBValue para extraer colores individuales de un valor de color RGB.

Si el usuario cancela el cuadro de diálogo Color o se produce un error, ChooseColor devuelve FALSE y el miembro rgbResult no está definido. Para determinar la causa del error, llame a la función CommDlgExtendedError para recuperar el valor de error extendido.

En esta sección se tratan los siguientes temas

Cuadros de diálogo Color completo y parcial

El cuadro de diálogo Color tiene una versión completa y una versión parcial de la interfaz de usuario. La versión completa incluye los controles básicos y tiene controles adicionales que permiten al usuario crear colores personalizados. La versión parcial tiene controles que muestran las paletas de colores básicas y personalizadas desde las que el usuario puede seleccionar un valor de color.

La versión parcial del cuadro de diálogo Color incluye un botón Definir colores personalizados . El usuario puede hacer clic en este botón para mostrar la versión completa. Puede dirigir el cuadro de diálogo Color para mostrar siempre la versión completa estableciendo la marca CC_FULLOPEN en el miembro Flags de la estructura CHOOSECOLOR . Para evitar que el usuario cree colores personalizados, puede establecer la marca CC_PREVENTFULLOPEN para deshabilitar el botón Definir colores personalizados .

Los colores básicos representan una selección de los colores disponibles en el dispositivo especificado. El controlador de pantalla determina el número real de colores que se muestran. Por ejemplo, un controlador VGA muestra 48 colores y un controlador de pantalla monocromo muestra solo 16.

Los colores personalizados son los que especifique o que el usuario cree. Al crear un cuadro de diálogo Color, debe usar el miembro lpCustColors de la estructura CHOOSECOLOR para especificar los valores iniciales de los 16 colores personalizados. Si la versión completa del cuadro de diálogo Color está abierta, el usuario puede crear un color personalizado mediante uno de los métodos siguientes:

  • Mover el cursor en el control del espectro de colores y el control de diapositiva de luminosidad
  • Escribir valores RGB en los controles de edición Rojo, Verde y Azul
  • Escritura de valores HSL en los controles Hue, Sat y Lum edit

Para agregar un nuevo color personalizado a la presentación de colores personalizados, el usuario puede hacer clic en el botón Agregar a colores personalizados . Esto también hace que el cuadro de diálogo copie el valor RGB del nuevo color en el elemento correspondiente de la matriz a la que apunta el miembro lpCustColors . Para conservar nuevos colores personalizados entre las llamadas a ChooseColor, debe asignar memoria estática para la matriz. Para obtener más información sobre los modelos de color RGB y HSL, vea Modelos de color usados por el cuadro de diálogo Color.

Personalización del cuadro de diálogo Color

Para personalizar un cuadro de diálogo Color, puede usar cualquiera de los métodos siguientes:

  • Especificar valores en la estructura CHOOSECOLOR al crear el cuadro de diálogo
  • Proporcionar una plantilla personalizada
  • Proporcionar un procedimiento de enlace

Puede modificar la apariencia y el comportamiento del cuadro de diálogo Color estableciendo marcas en el miembro Flags de la estructura CHOOSECOLOR . Por ejemplo, puede establecer la marca CC_SOLIDCOLOR para dirigir el cuadro de diálogo para mostrar solo colores sólidos. Para que el cuadro de diálogo seleccione inicialmente un color distinto del negro, establezca la marca CC_RGBINIT y especifique un color en el miembro rgbResult .

Puede proporcionar una plantilla personalizada para el cuadro de diálogo Color, por ejemplo, si desea incluir controles adicionales que sean únicos para la aplicación. La función ChooseColor usa la plantilla personalizada en lugar de la plantilla predeterminada.

Para proporcionar una plantilla personalizada para el cuadro de diálogo Color

  1. Cree la plantilla personalizada modificando la plantilla predeterminada especificada en el archivo Color.dlg. Los identificadores de control usados en la plantilla de diálogo Color predeterminada se definen en el archivo Color.dlg.
  2. Use la estructura CHOOSECOLOR para habilitar la plantilla de la siguiente manera:
    • Si la plantilla personalizada es un recurso de una aplicación o biblioteca de vínculos dinámicos, establezca la marca CC_ENABLETEMPLATE en el miembro Flags . Use los miembros hInstance y lpTemplateName de la estructura para identificar el nombre del módulo y del recurso.

      -O bien-

    • Si la plantilla personalizada ya está en memoria, establezca la marca CC_ENABLETEMPLATEHANDLE . Use el miembro hInstance para identificar el objeto de memoria que contiene la plantilla.

Puede proporcionar un procedimiento de enlace CCHookProc para el cuadro de diálogo Color. El procedimiento de enlace puede procesar los mensajes enviados al cuadro de diálogo. También puede usar mensajes registrados para controlar el comportamiento del cuadro de diálogo. Si usa una plantilla personalizada para definir controles adicionales, debe proporcionar un procedimiento de enlace para procesar la entrada de los controles.

Para habilitar un procedimiento de enlace para el cuadro de diálogo Color

  1. Establezca la marca CC_ENABLEHOOK en el miembro Flags de la estructura CHOOSECOLOR .
  2. Especifique la dirección del procedimiento de enlace en el miembro lpfnHook .

Después de procesar su WM_INITDIALOG mensaje, el procedimiento del cuadro de diálogo envía un mensaje WM_INITDIALOG al procedimiento de enlace. El parámetro lParam de este mensaje es un puntero a la estructura CHOOSECOLOR utilizada para inicializar el cuadro de diálogo.

El cuadro de diálogo envía el mensaje registrado COLOROKSTRING al procedimiento de enlace cuando el usuario hace clic en el botón Aceptar . El procedimiento de enlace puede rechazar el color seleccionado y forzar que el cuadro de diálogo permanezca abierto devolviendo cero cuando recibe este mensaje. El procedimiento de enlace puede forzar al cuadro de diálogo a seleccionar un color determinado enviando el mensaje registrado SETRGBSTRING al cuadro de diálogo. Para usar estos mensajes registrados, debe pasar las constantes COLOROKSTRING y SETRGBSTRING a la función RegisterWindowMessage para obtener un identificador de mensaje. A continuación, puede usar el identificador para detectar y procesar mensajes enviados desde el cuadro de diálogo, o para enviar mensajes al cuadro de diálogo.

Modelos de color usados por el cuadro de diálogo Color

La extensión de colores personalizados del cuadro de diálogo Color permite al usuario especificar un color mediante valores RGB o HSL. Sin embargo, la estructura CHOOSECOLOR solo usa valores RGB para informar de los colores creados o seleccionados por el usuario.

Modelo de color RGB

El modelo RGB se usa para designar colores para pantallas y otros dispositivos que emiten luz. Los valores de color rojo, verde y azul válidos oscilan entre 0 y 255, con 0 que indica la intensidad mínima y 255 que indica la intensidad máxima. En la ilustración siguiente se muestra cómo se pueden combinar los colores principales rojo, verde y azul para producir cuatro colores adicionales. (En el caso de los dispositivos de visualización, el color negro da como resultado cuando los valores rojo, verde y azul se establecen en 0. En la tecnología de pantalla, el negro es la ausencia de todos los colores).

círculos rojos, verdes y azules superpuestos

En la tabla siguiente se enumeran ocho colores del modelo RGB y sus valores RGB asociados.

Color Valores RGB
Rojo 255, 0, 0
Verde 0, 255, 0
Azul 0, 0, 255
Cian 0, 255, 255
Fucsia 255, 0, 255
Amarillo 255, 255, 0
Blanco 255, 255, 255
Negro 0, 0, 0

 

El sistema almacena los colores internos como valores RGB de 32 bits que tienen la siguiente forma hexadecimal: 0x00bbggrr.

El byte de orden bajo contiene un valor para la intensidad relativa de rojo; el segundo byte contiene un valor para verde; y el tercer byte contiene un valor para azul. El byte de orden superior debe ser cero.

Puede usar la macro RGB para obtener un valor RGB basado en las densidades especificadas para los componentes rojo, verde y azul. Use las macros GetRValue, GetBValue y GetGValue para extraer colores individuales de un valor de color RGB.

Modelo de color HSL

El cuadro de diálogo Color proporciona controles para especificar valores HSL. En la ilustración siguiente se muestra el control de espectro de colores y el control de diapositiva de luminosidad que aparecen en el cuadro de diálogo Color. En la ilustración también se muestran los intervalos de valores que el usuario puede especificar con estos controles.

espectro de colores y escala de luminosidad

En el cuadro de diálogo Color, los valores de saturación y luminosidad deben estar en el intervalo entre 0 y 240 y el valor de tono debe estar en el intervalo entre 0 y 239.

Convertir valores HSL en valores RGB

El procedimiento del cuadro de diálogo proporcionado en Comdlg32.dll para el cuadro de diálogo Color contiene código que convierte los valores HSL en los valores RGB correspondientes. En la tabla siguiente se enumeran ocho colores del modelo RGB y sus valores HSL y RGB asociados.

Color HSL (valores) Valores RGB
Rojo (0, 240, 120) (255, 0, 0)
Amarillo (40, 240, 120) (255, 255, 0)
Verde (80, 240, 120) (0, 255, 0)
Cian (120, 240, 120) (0, 255, 255)
Azul (160, 240, 120) (0, 0, 255)
Fucsia (200, 240, 120) (255, 0, 255)
Blanco (0, 0, 240) (255, 255, 255)
Negro (0, 0, 0) (0, 0, 0)