次の方法で共有


Drop-Down カラー ピッカー

Windows リボン フレームワークには、分割ボタンとカスタマイズ可能なドロップダウン カラー セレクターを使用してさまざまな色設定を公開する特殊な Drop-Down カラー ピッカー コントロールが用意されています。

紹介

Microsoft Office カラー ピッカーの外観と機能をエミュレートすることで、リボン フレームワークは、幅広いアプリケーションで一貫性と使い慣れ性の恩恵を受け、貢献することができます。

マークアップ

すべてのリボン コントロールと同様に、Drop-Down カラー ピッカーはマークアップによって簡単に実装およびカスタマイズできます。 フレームワークには、さまざまなレベルの機能を公開する Drop-Down カラー ピッカー用の要素属性が多数用意されています。 次の表に、Drop-Down のカラー ピッカー属性を示します。

属性 形容
ColorTemplate カラー ピッカーの種類を指定するレイアウト テンプレート Drop-Down。
3 つのテンプレートがあり、それぞれに関連付けられている属性とプロパティ キーのコントロール レイアウトと既定値を指定します。
  • ThemeColors
  • StandardColors
  • HighlightColors
ChipSize 各カラー チップ (または見本) のサイズ。
  • Small
  • Medium
  • Large
カラー チップ (または見本) 列の数。
CommandName 関連付けられているコマンド宣言の名前。
IsAutomaticColorButtonVisible 自動 ボタンを表示 (または非表示) します。
ColorTemplate 値が ThemeColors または StandardColorsの場合にのみ有効です。
IsNoColorButtonVisible [色 なし] ボタン 表示 (または非表示) します。
すべての ColorTemplate 値に対して有効です。
RecentColorGridRows 最近の色 領域のカラー チップ (または見本) 行の数。
ColorTemplate 値が ThemeColorsの場合にのみ有効です。
StandardColorGridRows 標準色 領域のカラー チップ (または見本) 行の数。
ThemeColorGridRows テーマの色 領域内のカラー チップ (または見本) 行の数。
ColorTemplate 値が ThemeColorsの場合にのみ有効です。

次のスクリーン ショットは、3 つのカラー テンプレートの既定の Drop-Down カラー ピッカー レイアウトを示しています。

     
ThemeColors:[newline] colortemplate 属性が 'themecolors' に設定されている dropdowncolorpicker 要素のスクリーン ショットです。[改行] standardcolors:[newline] 、colortemplate 属性が 'standardcolors' に設定されている dropdowncolorpicker 要素のスクリーン ショットです。[改行] highlightcolors:[newline] 、colortemplate 属性が 'highlightcolors' に設定されている dropdowncolorpicker 要素のスクリーン ショットです。

次の例では、各 Drop-Down カラー ピッカーの種類に必要な基本的なマークアップを示します。

手記

Drop-Down カラー ピッカーは、SizeDefinition テンプレート内の有効な Button コントロールです。

<!-- 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>

コード

カスタマイズをサポートする特殊なコントロールとして、これらの機能を利用する Drop-Down カラー ピッカーの実装には、プロパティを管理し、コントロールによって発行されたすべてのコマンドを処理するための特殊なアプリケーション コードが必要です。

プロパティ

リボン フレームワークは、Drop-Down カラー ピッカー コントロールに プロパティ キーのコレクションを定義します。

通常、Drop-Down のカラー ピッカー プロパティは、IUIFramework::InvalidateUICommand メソッドの呼び出しによってコントロールに関連付けられているコマンドを無効にすることで、リボン UI で更新されます。 無効化イベントが処理され、IUICommandHandler::UpdateProperty コールバック メソッドによってプロパティが更新されます。

IUICommandHandler::UpdateProperty コールバック メソッドは実行されず、アプリケーションは、フレームワークでプロパティが必要になるまで、更新されたプロパティ値を照会しました。 たとえば、タブがアクティブになり、リボン UI にコントロールが表示されたときや、ツールヒントが表示されたときなどです。

手記

場合によっては、IUIFramework::GetUICommandProperty メソッドを使用してプロパティを取得し、IUIFramework::SetUICommandProperty メソッドで設定できます。

次の表に、Drop-Down カラー ピッカー コントロールに関連付けられているプロパティ キーの一覧を示します。

プロパティ キー 形容 筆記
UI_PKEY_AutomaticColorLabel 自動 色ボタンのラベルを定義します。
ColorTemplate 値が ThemeColors または StandardColorsの場合にのみ有効です。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_Color 選択した色の値を COLORREFとして定義します。
UI_PKEY_ColorType の値が UI_SWATCHCOLORTYPE_RGBの場合にのみ有効です。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_ColorType 選択した色の種類を定義します。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_Enabled コントロールがユーザーの操作に応答する機能を定義します。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_Keytip 無効化によってのみ更新できます。
UI_PKEY_Label コントロール ラベルの文字列を定義します。
無効化によってのみ更新できます。
UI_PKEY_LargeHighContrastImage コントロールに表示する大きなハイ コントラスト画像を定義します。
無効化によってのみ更新できます。
イメージ形式の詳細については、「リボン イメージ リソースを指定する」を参照してください。
UI_PKEY_LargeImage コントロールに表示する大きなイメージを定義します。
無効化によってのみ更新できます。
イメージ形式の詳細については、「リボン イメージ リソースを指定する」を参照してください。
UI_PKEY_MoreColorsLabel [その他の色 ... ボタンのラベルを定義します。
ColorTemplate 値が ThemeColors または StandardColorsの場合にのみ有効です。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_NoColorLabel [色 しない] ボタンのラベルを定義します。
すべての ColorTemplate 値に対して有効です。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_RecentColorsCategoryLabel [最近使った色] カテゴリのラベル 定義します。
ColorTemplate 値が ThemeColorsの場合にのみ有効です。 これは、ラベル付けされたカテゴリを含む唯一のテンプレートです。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_SmallHighContrastImage コントロールに表示する小さなハイ コントラストイメージを定義します。
無効化によってのみ更新できます。
イメージ形式の詳細については、「リボン イメージ リソースを指定する」を参照してください。
UI_PKEY_SmallImage コントロールに表示する小さなイメージを定義します。
無効化によってのみ更新できます。
イメージ形式の詳細については、「リボン イメージ リソースを指定する」を参照してください。
UI_PKEY_StandardColors Drop-Down カラー ピッカーの見本の COLORREF 値の配列を定義します。
ColorTemplate 各 Drop-Down カラー ピッカーには、StandardColors グリッドが含まれています。
注: 配列の最初の StandardColorGridRows x Columns からの COLORREF 値が表示されます。 配列がマークアップで宣言された StandardColors 見本の数よりも少ない色を定義している場合は、欠落しているチップに空のスペースが表示されます。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_StandardColorsCategoryLabel 標準色 カテゴリのラベルを定義します。
ColorTemplate 値が ThemeColorsの場合にのみ有効です。 これは、ラベル付けされたカテゴリを含む唯一のテンプレートです。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_StandardColorsTooltips StandardColors グリッドのカラー 見本ヒントの文字列配列を定義します。
ColorTemplate 各 Drop-Down カラー ピッカーには、StandardColors グリッドが含まれています。
注:StandardColors グリッドに表示される色見本にラベルを付けるために必要なツール ヒントのみが使用されます。 StandardColors グリッド内の見本の数よりも少ないラベルが指定されている場合、残りの見本には既定値が指定されます。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_ThemeColors Drop-Down カラー ピッカーの見本の COLORREF 値の配列を定義します。
ColorTemplate 値が ThemeColorsの場合にのみ有効です。
注: 配列の最初の ThemeColorGridRows x ColumnsCOLORREF 値が表示されます。 配列がマークアップで宣言された ThemeColors 見本の数よりも少ない色を定義している場合は、欠落しているチップに空のスペースが表示されます。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_ThemeColorsTooltips ThemeColors グリッドのカラー 見本ヒントの文字列配列を定義します。
ColorTemplate 値が ThemeColorsの場合にのみ有効です。
注:ThemeColors グリッドに表示される色見本にラベルを付けるために必要なツール ヒントのみが使用されます。 ThemeColors グリッド内の見本の数よりも少ないラベルが指定されている場合、残りの見本には既定値が指定されます。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_ThemeColorsCategoryLabel テーマの色 カテゴリのラベルを定義します。
ColorTemplate 値が ThemeColorsの場合にのみ有効です。 これは、ラベル付けされたカテゴリを含む唯一のテンプレートです。
IUIFramework::GetUICommandPropertyおよび IUIFramework::SetUICommandPropertyをサポートします。
UI_PKEY_TooltipDescription UI_PKEY_TooltipTitleに関連付けられたヒントの説明の文字列を定義します。
無効化によってのみ更新できます。
UI_PKEY_TooltipTitle コマンド ヒントの文字列を定義します。
無効化によってのみ更新できます。

コマンド ハンドラー

IUICommandHandler::UpdateProperty メソッドは、上記のプロパティ キーを使用して Drop-Down カラー ピッカーをカスタマイズするために使用されます。 次の例では、カスタム スタイルの基本設定またはマークアップで宣言されているカスタム 見本グリッドに基づいて、Drop-Down カラー ピッカーの色見本を設定する方法を示します。

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;
}

次の例では、Drop-Down カラー ピッカーの見本の色をリボン アプリケーションに公開する IUICommandHandler::Execute メソッドの実装を示します。

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;
}

Windows リボン フレームワーク コントロール ライブラリ

DropDownColorPicker マークアップ要素する

カラー ピッカーのプロパティ

サイズ定義とスケーリング ポリシーを使用したリボンのカスタマイズ

DropDownColorPicker サンプル