Compartilhar via


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.
  • ThemeColors
  • StandardColors
  • HighlightColors
ChipSize O tamanho de cada chip de cor (ou amostra).
  • Small
  • Medium
  • Large
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] captura de tela do elemento dropdowncolorpicker com o atributo colortemplate definido como 'themecolors'.[newline] standardcolors:[newline] captura de tela do elemento dropdowncolorpicker com o atributo colortemplate definido como 'standardcolors'.[newline] highlightcolors:[newline] captura de tela do elemento dropdowncolorpicker com o atributo colortemplate definido como 'highlightcolors'.

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=&quot;cmdDropDownColorPickerGroup&quot;
       SizeDefinition=&quot;ThreeButtons&quot;>
  <DropDownColorPicker
    CommandName=&quot;cmdDropDownColorPickerThemeColors&quot;
    ColorTemplate=&quot;ThemeColors&quot;/>
  <DropDownColorPicker
    CommandName=&quot;cmdDropDownColorPickerStandardColors&quot;
    ColorTemplate=&quot;StandardColors&quot;/>
  <DropDownColorPicker
    CommandName=&quot;cmdDropDownColorPickerHighlightColors&quot;
    ColorTemplate=&quot;HighlightColors&quot;
    StandardColorGridRows=&quot;1&quot;/>
</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;
}

Biblioteca de Controle da Estrutura da Faixa de Opções do Windows

Elemento de marcação DropDownColorPicker

Propriedades do Seletor de Cores

Personalizando uma faixa de opções por meio de definições de tamanho e políticas de dimensionamento

Exemplo de DropDownColorPicker