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 .
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
- Personalizando a caixa de diálogo Cor
- Modelos de cores usados pela caixa de diálogo Cor
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
- 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.
- 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
- Defina o sinalizador CC_ENABLEHOOK no membro Flags da estrutura CHOOSECOLOR .
- 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.)
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.
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) |