Seletor de Cores Drop-Down
A estrutura da Faixa de Opções do Windows fornece um controle especializado Drop-Down Seletor de Cores que expõe uma variedade de configurações de cor por meio de um botão dividido e um seletor de cores suspenso personalizável.
Introdução
Ao emular a aparência e a funcionalidade do seletor de cores do Microsoft Office, a estrutura da Faixa de Opções é capaz de se beneficiar e contribuir com consistência e familiaridade em uma ampla variedade de aplicativos.
Marcação
Como todos os controles da Faixa de Opções, o seletor de cores Drop-Down é facilmente implementado e personalizado por meio da marcação. A estrutura fornece vários atributos de elemento para o seletor de cores Drop-Down para expor vários níveis de funcionalidade. A tabela a seguir lista os atributos Drop-Down Seletor de Cores.
Atributo | Descrição |
---|---|
ColorTemplate | Modelos de layout que especificam o tipo de Drop-Down Seletor de Cores. Há três modelos, cada um deles especifica um layout de controle e valores padrão para atributos associados e chaves de propriedade.
|
ChipSize | O tamanho de cada chip de cor (ou amostra).
|
Colunas | O número de colunas de chip de cor (ou amostra). |
CommandName | O nome da declaração command associada. |
IsAutomaticColorButtonVisible | Exibe (ou oculta) o botão Automático . Válido somente quando ColorTemplate tiver um valor de ThemeColors ou StandardColors . |
IsNoColorButtonVisible | Exibe (ou oculta) o botão Sem cor . Válido para todos os valores ColorTemplate . |
RecentColorGridRows | O número de linhas de chip de cor (ou amostra) na área Cores recentes . Válido somente quando ColorTemplate tiver um valor de ThemeColors . |
StandardColorGridRows | O número de linhas de chip de cor (ou amostra) na área Cores padrão . |
ThemeColorGridRows | O número de linhas de chip de cor (ou amostra) na área Cores do tema . Válido somente quando ColorTemplate tiver um valor de ThemeColors . |
As capturas de tela a seguir ilustram os layouts padrão Drop-Down Seletor de Cores para os três modelos de cores.
ThemeColors :[newline] [newline] |
standardcolors :[newline] [newline] |
highlightcolors :[newline] |
A marcação básica necessária para cada tipo de Seletor de Cor Drop-Down é demonstrada nos seguintes exemplos:
Observação
O seletor de cores Drop-Down é um controle Button válido em um modelo SizeDefinition .
<!-- DropDownColorPickers -->
<Command Name="cmdDropDownColorPickerGroup"
Symbol="cmdDropDownColorPickerGroup"
Comment="DropDownColorPicker Group"
Id="55000"/>
<Command Name="cmdDropDownColorPickerThemeColors"
Symbol="cmdDropDownColorPickerThemeColors"
Comment="DropDownColorPicker ThemeColors"
Id="55010"
LabelTitle="ThemeColors"
LabelDescription="ThemeColors\ndescription."/>
<Command Name="cmdDropDownColorPickerStandardColors"
Symbol="cmdDropDownColorPickerStandardColors"
Comment="DropDownColorPicker StandardColors"
Id="55011"
LabelTitle="StandardColors"/>
<Command Name="cmdDropDownColorPickerHighlightColors"
Symbol="cmdDropDownColorPickerHighlightColors"
Comment="DropDownColorPicker HighlightColors"
Id="55012"
LabelTitle="HighlightColors"/>
<Group CommandName="cmdDropDownColorPickerGroup"
SizeDefinition="ThreeButtons">
<DropDownColorPicker
CommandName="cmdDropDownColorPickerThemeColors"
ColorTemplate="ThemeColors"/>
<DropDownColorPicker
CommandName="cmdDropDownColorPickerStandardColors"
ColorTemplate="StandardColors"/>
<DropDownColorPicker
CommandName="cmdDropDownColorPickerHighlightColors"
ColorTemplate="HighlightColors"
StandardColorGridRows="1"/>
</Group>
Código
Como um controle especializado que dá suporte à personalização, qualquer implementação do seletor de cores Drop-Down que aproveite esses recursos requer código de aplicativo especializado para gerenciar propriedades e manipular quaisquer comandos emitidos pelo controle.
Propriedades
A estrutura da Faixa de Opções define uma coleção de chaves de propriedade para o controle seletor de cores Drop-Down.
Normalmente, uma propriedade Drop-Down Seletor de Cores é atualizada na interface do usuário da faixa de opções invalidando o Comando associado ao controle por meio de uma chamada para o método IUIFramework::InvalidateUICommand . O evento de invalidação é tratado e as atualizações de propriedade definidas pelo método de retorno de chamada IUICommandHandler::UpdateProperty .
O método de retorno de chamada IUICommandHandler::UpdateProperty não é executado e o aplicativo consultou um valor de propriedade atualizado até que a propriedade seja exigida pela estrutura. Por exemplo, quando uma guia é ativada e um controle revelado na interface do usuário da faixa de opções ou quando uma dica de ferramenta é exibida.
Observação
Em alguns casos, uma propriedade pode ser recuperada por meio do método IUIFramework::GetUICommandProperty e definida com o método IUIFramework::SetUICommandProperty .
A tabela a seguir lista as chaves de propriedade associadas ao controle seletor de cores Drop-Down.
Chave de Propriedade | Descrição | Observações |
---|---|---|
UI_PKEY_AutomaticColorLabel | Define o rótulo para o botão Cor automática . Válido somente quando ColorTemplate tiver um valor de ThemeColors ou StandardColors . |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_Color | Define o valor de cor selecionado como UM COLORREF. Válido somente quando UI_PKEY_ColorType tem um valor de UI_SWATCHCOLORTYPE_RGB . |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_ColorType | Define o tipo de cor selecionado. |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_Enabled | Define a capacidade de um controle responder à interação do usuário. |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_Keytip | Só pode ser atualizado por meio de invalidação. | |
UI_PKEY_Label | Define a cadeia de caracteres para um rótulo de controle. |
Só pode ser atualizado por meio de invalidação. |
UI_PKEY_LargeHighContrastImage | Define a imagem de alto contraste grande a ser exibida para um controle. |
Só pode ser atualizado por meio de invalidação. Para obter mais informações sobre formatos de imagem, consulte Especificando recursos de imagem da faixa de opções. |
UI_PKEY_LargeImage | Define a imagem grande a ser exibida para um controle. |
Só pode ser atualizado por meio de invalidação. Para obter mais informações sobre formatos de imagem, consulte Especificando recursos de imagem da faixa de opções. |
UI_PKEY_MoreColorsLabel | Define o rótulo para o botão Mais cores... Válido somente quando ColorTemplate tiver um valor de ThemeColors ou StandardColors . |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_NoColorLabel | Define o rótulo para o botão Sem cor . Válido para todos os valores ColorTemplate . |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_RecentColorsCategoryLabel | Define o rótulo para a categoria Cores recentes . Válido somente quando ColorTemplate tiver um valor de ThemeColors . Esse é o único modelo que contém categorias rotuladas. |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_SmallHighContrastImage | Define a pequena imagem de alto contraste a ser exibida para um controle. |
Só pode ser atualizado por meio de invalidação. Para obter mais informações sobre formatos de imagem, consulte Especificando recursos de imagem da faixa de opções. |
UI_PKEY_SmallImage | Define a imagem pequena a ser exibida para um controle. |
Só pode ser atualizado por meio de invalidação. Para obter mais informações sobre formatos de imagem, consulte Especificando recursos de imagem da faixa de opções. |
UI_PKEY_StandardColors | Define uma matriz de valores COLORREF para as amostras de um seletor de cores Drop-Down. Cada Drop-Down ColorTemplate do Seletor de Cores contém uma StandardColors grade. Nota: Os valores COLORREF das colunas StandardColorGridRows x iniciais da matriz são exibidos . Se a matriz definir menos cores do que o número de StandardColors amostras declaradas na marcação, espaços vazios serão exibidos para os chips ausentes. |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_StandardColorsCategoryLabel | Define o rótulo para a categoria Cores padrão . Válido somente quando ColorTemplate tiver um valor de ThemeColors . Esse é o único modelo que contém categorias rotuladas. |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_StandardColorsTooltips | Define uma matriz de cadeia de caracteres de dicas de ferramenta de amostra de cores para a StandardColors grade.Cada Drop-Down ColorTemplate do Seletor de Cores contém uma StandardColors grade. Nota: Somente as dicas de ferramenta necessárias para rotular as amostras de cor exibidas na StandardColors grade são usadas. Se menos rótulos forem fornecidos do que o número de amostras na StandardColors grade, um padrão será fornecido para as amostras restantes. |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_ThemeColors | Define uma matriz de valores COLORREF para as amostras de um seletor de cores Drop-Down. Válido somente quando ColorTemplate tiver um valor de ThemeColors . Nota: Os valores COLORREF das colunas ThemeColorGridRows x iniciais da matriz são exibidos . Se a matriz definir menos cores do que o número de ThemeColors amostras declaradas na marcação, espaços vazios serão exibidos para os chips ausentes. |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_ThemeColorsTooltips | Define a matriz de cadeia de caracteres de dicas de ferramenta de amostra de cores para a ThemeColors grade.Válido somente quando ColorTemplate tiver um valor de ThemeColors . Nota: Somente as dicas de ferramenta necessárias para rotular as amostras de cor exibidas na ThemeColors grade são usadas. Se menos rótulos forem fornecidos do que o número de amostras na ThemeColors grade, um padrão será fornecido para as amostras restantes. |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_ThemeColorsCategoryLabel | Define o rótulo para a categoria Cores do tema . Válido somente quando ColorTemplate tiver um valor de ThemeColors . Esse é o único modelo que contém categorias rotuladas. |
Dá suporte a IUIFramework::GetUICommandProperty e IUIFramework::SetUICommandProperty. |
UI_PKEY_TooltipDescription | Define a cadeia de caracteres para uma descrição de dica de ferramenta associada a um UI_PKEY_TooltipTitle. |
Só pode ser atualizado por meio de invalidação. |
UI_PKEY_TooltipTitle | Define a cadeia de caracteres para uma dica de ferramenta de comando. |
Só pode ser atualizado por meio de invalidação. |
Manipuladores de comando
O método IUICommandHandler::UpdateProperty é usado para personalizar um seletor de cor Drop-Down por meio das chaves de propriedade listadas acima. O exemplo a seguir demonstra como definir as amostras de cores de um seletor de cor Drop-Down, com base em uma preferência de estilo personalizada ou em uma grade de amostra personalizada declarada na marcação.
STDMETHODIMP DropDownColorPickerHandler::UpdateProperty(
UINT nCmdID,
__in REFPROPERTYKEY key,
__in_opt const PROPVARIANT* ppropvarCurrentValue,
__out PROPVARIANT* ppropvarNewValue)
{
HRESULT hr = E_NOTIMPL;
if (key == UI_PKEY_ThemeColors)
{
COLORREF rThemeColors[TOT_THEME_COLORS];
for (LONG i = 0; i < ARRAYSIZE(rThemeColors); i++)
{
// any COLORREF
rThemeColors[i] = RGB(0, 255, 0);
}
hr = InitPropVariantFromUInt32Vector(
&rThemeColors, ARRAYSIZE(rThemeColors), ppropvarNewValue);
}
else if (key == UI_PKEY_StandardColors)
{
ULONG rStandardColors[TOT_STANDARD_COLORS];
for (LONG i = 0; i < ARRAYSIZE(rStandardColors); i++)
{
// any COLORREF
rStandardColors[i] = RGB(255, 0, 0);
}
hr = InitPropVariantFromUInt32Vector(
&rStandardColors, ARRAYSIZE(rStandardColors),ppropvarNewValue);
}
else if (key == UI_PKEY_ThemeColorsTooltips)
{
BSTR rThemeTooltips[TOT_THEME_COLORS];
for (LONG i = 0; i < ARRAYSIZE(rThemeTooltips); i++)
{
// any constant character string
rThemeTooltips[i] = L"Green";
}
hr = InitPropVariantFromStringVector((PCWSTR *)&rThemeTooltips, 50, ppropvarNewValue);
}
else if (key == UI_PKEY_StandardColorsTooltips)
{
static BSTR rStandardTooltips[TOT_STANDARD_COLORS];
for (LONG i = 0; i < ARRAYSize(rStandardTooltips); i++)
{
// any constant character string
rStandardTooltips[i] = L"Red";
}
hr = InitPropVariantFromStringVector(
(PCWSTR *)&rStandardTooltips, 20, ppropvarNewValue);
}
return hr;
}
O exemplo a seguir demonstra uma implementação do método IUICommandHandler::Execute que expõe as cores de amostra do Seletor de Cores Drop-Down ao aplicativo Ribbon.
STDMETHODIMP DropDownColorPickerHandler::Execute(
UINT nCmdID,
UI_EXECUTIONVERB verb,
__in_opt const PROPERTYKEY* key,
__in_opt const PROPVARIANT* ppropvarValue,
__in_opt IUISimplePropertySet* pCommandExecutionProperties)
{
HRESULT hr = E_NOTIMPL;
if (*key == UI_PKEY_ColorType)
{
UI_SWATCHCOLORTYPE uType =
(UI_SWATCHCOLORTYPE)PropVariantToUInt32WithDefault(
*ppropvarValue,
UI_SWATCHCOLORTYPE_NOCOLOR);
COLORREF color;
switch(uType)
{
case UI_SWATCHCOLORTYPE_RGB:
PROPVARIANT var;
pCommandExecutionProperties->GetValue(UI_PKEY_Color, &var);
color = PropVariantToUInt32WithDefault(var, 0);
break;
case UI_SWATCHCOLORTYPE_AUTOMATIC:
color = COLOR_WINDOWTEXT;
break;
case UI_SWATCHCOLORTYPE_NOCOLOR:
color = MSONoFill;
break;
}
// do with your color what you will...
gInternalColor = color;
hr = S_OK;
}
return hr;
}