Compartilhar via


Caixa de diálogo Cor

Exibe uma caixa de diálogo modal que permite que o usuário escolha um valor de cor específico. O usuário pode escolher uma cor de um conjunto de paletas de cores básicas ou personalizadas. Como alternativa, o usuário pode gerar um valor de cor modificando os valores de cor RGB ou matiz, saturação, luminosidade (HSL) da interface do usuário da caixa de diálogo. A caixa de diálogo Cor retorna o valor RGB da cor selecionada pelo usuário.

Crie e exiba uma caixa de diálogo de Cor inicializando uma estruturaCHOOSECOLOR e passando a estrutura para a funçãoChooseColor. Ao definir valores de parâmetro diferentes para a estrutura CHOOSECOLOR, você pode afetar a forma como a caixa de diálogo Cor é exibida. Por exemplo, você pode exibir uma versão completa ou parcial da interface do usuário da caixa de diálogo. A ilustração a seguir mostra a versão completa da interface do usuário da caixa de diálogo Color.

caixa de diálogo de cor

Se o usuário clicar no botão OK, ChooseColor retornará TRUE. O rgbResult membro da estruturaCHOOSECOLOR contém o valor de cor RGB da cor selecionada pelo usuário. O valor de cor RGB especifica as intensidades das cores vermelho, verde e azul individuais que compõem a cor selecionada. Os valores individuais variam de 0 a 255. Use as macros GetRValue, GetGValuee GetBValue para extrair cores individuais de um valor de cor RGB.

Se o usuário cancelar a caixa de diálogo Cor ou ocorrer um erro, ChooseColor retornará FALSE e o membro rgbResult não estiver definido. Para determinar a causa do erro, chame a função CommDlgExtendedError para recuperar o valor de erro estendido.

Os seguintes assuntos são abordados nesta seção

Caixas de diálogo cor completas e parciais

A caixa de diálogo Cor tem uma versão completa e uma versão parcial da interface do usuário. A versão completa inclui os controles básicos e tem controles adicionais que permitem ao usuário criar cores personalizadas. A versão parcial tem controles que exibem as paletas de cores básicas e personalizadas das quais o usuário pode selecionar um valor de cor.

A versão parcial da caixa de diálogo Cor inclui um botão Definir Cores Personalizadas. O usuário pode clicar neste botão para exibir a versão completa. Você pode direcionar a caixa de diálogo Cor para sempre exibir a versão completa definindo o sinalizador CC_FULLOPEN no membro sinalizadores da estruturaCHOOSECOLOR. Para impedir que o usuário crie cores personalizadas, você pode definir o sinalizador CC_PREVENTFULLOPEN para desabilitar o botão Definir Cores Personalizadas.

As cores básicas representam uma seleção das cores disponíveis no dispositivo especificado. O número real de cores exibidas é determinado pelo driver de exibição. Por exemplo, um driver VGA exibe 48 cores e um driver de exibição monocromático exibe apenas 16.

As cores personalizadas são aquelas que você especifica ou que o usuário cria. Ao criar uma caixa de diálogo Cor, você deve usar o lpCustColors membro da estruturaCHOOSECOLOR para especificar os valores iniciais para as 16 cores personalizadas. Se a versão completa da caixa de diálogo Cor estiver aberta, o usuário poderá criar uma cor personalizada por um dos seguintes métodos:

  • Movendo o cursor no controle de espectro de cores e no controle de slide de luminosidade
  • Digitando valores RGB nos controles de edição Red, Greene Blue
  • Digitar valores de HSL no Hue, Sate Lum editar controles

Para adicionar uma nova cor personalizada à exibição de cores personalizadas, o usuário pode clicar no botão Adicionar a Cores Personalizadas. Isso também faz com que a caixa de diálogo copie o valor RGB da nova cor para o elemento correspondente na matriz apontada pelo membro lpCustColors. Para preservar novas cores personalizadas entre chamadas para ChooseColor, você deve alocar memória estática para a matriz. Para obter mais informações sobre os modelos de cores RGB e HSL, consulte Modelos de cores usados pela caixa de diálogo Cor.

Personalizando a caixa de diálogo Cor

Para personalizar uma caixa de diálogo Cor, você pode usar qualquer um dos seguintes métodos:

  • Especificar valores na estruturaCHOOSECOLOR ao criar a caixa de diálogo
  • Fornecer um modelo personalizado
  • Fornecer um procedimento de gancho

Você pode modificar a aparência e o comportamento da caixa de diálogo Cor definindo sinalizadores no Flags membro da estruturaCHOOSECOLOR. Por exemplo, você pode definir o sinalizador CC_SOLIDCOLOR para direcionar a caixa de diálogo para exibir apenas cores sólidas. Para fazer com que a caixa de diálogo selecione inicialmente uma cor diferente de preto, defina o sinalizador CC_RGBINIT e especifique uma cor no membro rgbResult.

Você pode fornecer um modelo personalizado para a caixa de diálogo Cor, por exemplo, se quiser incluir controles adicionais exclusivos para seu aplicativo. A função ChooseColor usa seu modelo personalizado no lugar do modelo padrão.

Para fornecer um modelo personalizado para a caixa de diálogo Cor

  1. Crie o modelo personalizado modificando o modelo padrão especificado no arquivo Color.dlg. Os identificadores de controle usados no modelo de diálogo Cor padrão são definidos no arquivo Color.dlg.
  2. Use a estruturaCHOOSECOLOR para habilitar o modelo da seguinte maneira:
    • Se o modelo personalizado for um recurso em um aplicativo ou biblioteca de link dinâmico, defina o sinalizador CC_ENABLETEMPLATE no membro sinalizadores do. Use os membros hInstance e lpTemplateName da estrutura para identificar o módulo e o nome do recurso.

      -Ou-

    • Se o modelo personalizado já estiver na memória, defina o sinalizador CC_ENABLETEMPLATEHANDLE. Use o membro hInstance para identificar o objeto de memória que contém o modelo.

Você pode fornecer um procedimento CCHookProc gancho para a caixa de diálogo Cor. O procedimento de gancho pode processar mensagens enviadas para a caixa de diálogo. Ele também pode usar mensagens registradas para controlar o comportamento da caixa de diálogo. Se você usar um modelo personalizado para definir controles adicionais, deverá fornecer um procedimento de gancho para processar a entrada para seus controles.

Para habilitar um procedimento de gancho para a caixa de diálogo Cor

  1. Defina o sinalizador CC_ENABLEHOOK no Flags membro da estruturaCHOOSECOLOR.
  2. Especifique o endereço do procedimento de gancho no membro lpfnHook.

Depois de processar sua mensagem de WM_INITDIALOG, o procedimento da caixa de diálogo envia uma mensagem WM_INITDIALOG para o procedimento de gancho. O parâmetro lParam dessa mensagem é um ponteiro para a estruturaCHOOSECOLOR usada para inicializar a caixa de diálogo.

A caixa de diálogo envia a mensagem COLOROKSTRING registrada para o procedimento de gancho quando o usuário clica no botão OK. O procedimento de gancho pode rejeitar a cor selecionada e forçar a caixa de diálogo a permanecer aberta retornando zero quando receber essa mensagem. O procedimento de gancho pode forçar a caixa de diálogo a selecionar uma cor específica enviando a SETRGBSTRING mensagem registrada para a caixa de diálogo. Para usar essas mensagens registradas, você deve passar as COLOROKSTRING e constantes SETRGBSTRING para a funçãoRegisterWindowMessage para obter um identificador de mensagem. Em seguida, você pode usar o identificador para detectar e processar mensagens enviadas da caixa de diálogo ou para enviar mensagens para a caixa de diálogo.

Modelos de cores usados pela caixa de diálogo Cor

A extensão de cores personalizadas da caixa de diálogo Cor permite que o usuário especifique uma cor usando valores RGB ou HSL. No entanto, a estrutura CHOOSECOLOR usa apenas valores RGB para relatar as cores criadas ou selecionadas pelo usuário.

Modelo de cor RGB

O modelo RGB é usado para designar cores para exibições e outros dispositivos que emitem luz. Os valores vermelhos, verdes e azuis válidos variam de 0 a 255, com 0 indicando intensidade mínima e 255 indicando intensidade máxima. A ilustração a seguir mostra como as cores primárias vermelha, verde e azul podem ser combinadas para produzir quatro cores adicionais. (Para dispositivos de exibição, a cor preta resulta quando os valores vermelho, verde e azul são definidos como 0. Na tecnologia de exibição, preto é a ausência de todas as cores.)

círculos vermelhos, verdes e azuis sobrepostos

A tabela a seguir lista oito cores do modelo RGB e seus valores RGB associados.

Cor Valores RGB
Vermelho 255, 0, 0
Verde 0, 255, 0
Azul 0, 0, 255
Ciano 0, 255, 255
Magenta 255, 0, 255
Amarelo 255, 255, 0
Branco 255, 255, 255
Preto 0, 0, 0

 

O sistema armazena cores internas como valores RGB de 32 bits que têm a seguinte forma hexadecimal: 0x00bbggrr.

O byte de baixa ordem contém um valor para a intensidade relativa do vermelho; o segundo byte contém um valor para verde; e o terceiro byte contém um valor para azul. O byte de alta ordem deve ser zero.

Você pode usar a macro RGB para obter um valor RGB com base nas intensidades especificadas para os componentes vermelho, verde e azul. Use as macros GetRValue, GetBValuee GetGValue para extrair cores individuais de um valor de cor RGB.

Modelo de cor HSL

A caixa de diálogo Cor fornece controles para especificar valores HSL. A ilustração a seguir mostra o controle de espectro de cores e o controle de slide de luminosidade que aparecem na caixa de diálogo Cor. A ilustração também mostra os intervalos de valores que o usuário pode especificar com esses controles.

de dimensionamento de espectro de cores e luminosidade

Na caixa de diálogo Cor, os valores de saturação e luminosidade devem estar no intervalo de 0 a 240 e o valor de matiz deve estar no intervalo de 0 a 239.

Convertendo valores HSL em valores RGB

O procedimento da caixa de diálogo fornecido em Comdlg32.dll para a caixa de diálogo Cor contém código que converte valores HSL nos valores RGB correspondentes. A tabela a seguir lista oito cores do modelo RGB e seus valores HSL e RGB associados.

Cor Valores de HSL Valores RGB
Vermelho (0, 240, 120) (255, 0, 0)
Amarelo (40, 240, 120) (255, 255, 0)
Verde (80, 240, 120) (0, 255, 0)
Ciano (120, 240, 120) (0, 255, 255)
Azul (160, 240, 120) (0, 0, 255)
Magenta (200, 240, 120) (255, 0, 255)
Branco (0, 0, 240) (255, 255, 255)
Preto (0, 0, 0) (0, 0, 0)