Partilhar 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.

Você cria e exibe uma caixa de diálogo Cor inicializando uma estrutura CHOOSECOLOR e passando a estrutura para a função ChooseColor . 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 Cor .

caixa de diálogo color

Se o usuário clicar no botão OK , ChooseColor retornará TRUE. O membro rgbResult da estrutura CHOOSECOLOR 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, GetGValue e 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 assuntos a seguir 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 que o usuário crie 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 Flags da estrutura CHOOSECOLOR . 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 membro lpCustColors da estrutura CHOOSECOLOR 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 o controle de slide de luminosidade
  • Digitando valores RGB nos controles de edição Vermelho, Verde e Azul
  • Digitando valores HSL nos controles de edição Hue, Sat e Lum

Para adicionar uma nova cor personalizada à exibição de cores personalizadas, o usuário pode clicar no botão Adicionar às 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:

  • Especifique valores na estrutura CHOOSECOLOR 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 membro Flags da estrutura CHOOSECOLOR . 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 caixa de diálogo Cor padrão são definidos no arquivo Color.dlg.
  2. Use a estrutura CHOOSECOLOR para habilitar o modelo da seguinte maneira:
    • Se o modelo personalizado for um recurso em um aplicativo ou biblioteca de links dinâmicos, defina o sinalizador CC_ENABLETEMPLATE no membro Flags . 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 de gancho CCHookProc 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 membro Flags da estrutura CHOOSECOLOR .
  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 estrutura CHOOSECOLOR usada para inicializar a caixa de diálogo.

A caixa de diálogo envia a mensagem registrada COLOROKSTRING 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 mensagem registrada SETRGBSTRING para a caixa de diálogo. Para usar essas mensagens registradas, você deve passar as constantes COLOROKSTRING e SETRGBSTRING para a função RegisterWindowMessage 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 telas 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 vermelho, 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
Branca 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 de 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, GetBValue e 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.

espectro de cores e escala de 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 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)
Branca (0, 0, 240) (255, 255, 255)
Preto (0, 0, 0) (0, 0, 0)