次の方法で共有


コンテキスト ポップアップ

コンテキスト ポップアップは、Windows リボン フレームワークの ContextPopup ビュー のプリンシパル コントロールです。 これは、リボン実装の拡張機能としてフレームワークによってのみ公開されるリッチ コンテキスト メニュー システムです。フレームワークは、コンテキスト ポップアップを独立したコントロールとして公開しません。

コンテキスト ポップアップのコンポーネント

コンテキスト ポップアップは、 ContextMenu マークアップ要素と MiniToolbar マークアップ要素を通じて公開されるコンテキスト メニューとMini-Toolbarサブコントロールの論理コンテナーです。

各サブコントロールは、コンテキスト ポップアップに最大で 1 回表示できます。

次のスクリーン ショットは、コンテキスト ポップアップとその構成要素のサブコントロールを示しています。

リボンコンテキスト UI コンポーネントを示す吹き出しを含むスクリーン ショット。

コンテキスト ポップアップは純粋に概念的であり、配置やサイズ設定などの UI 機能自体は公開されません。

Note

コンテキスト ポップアップは、通常、目的のオブジェクトでマウスを右クリック (またはキーボード ショートカット Shift + F10) を使用して表示されます。 ただし、コンテキスト ポップアップを表示するために必要な手順は、アプリケーションによって定義されます。

 

コンテキスト ポップアップを実装する

他の Windows リボン フレームワーク コントロールと同様に、コンテキスト ポップアップは、そのプレゼンテーションの詳細を指定するマークアップ コンポーネントと、その機能を制御するコード コンポーネントを通じて実装されます。

次の表に、各 Context Popup サブコントロールでサポートされているコントロールの一覧を示します。

コントロール Mini-Toolbar コンテキスト メニュー
Button x x
チェック ボックス x x
コンボ ボックス x
ドロップダウン ボタン x x
ドロップダウン カラー ピッカー x x
ドロップダウン ギャラリー x x
フォント コントロール x
[ヘルプ] ボタン
リボン内ギャラリー
Spinner
分割ボタン x x
分割ボタン ギャラリー x x
トグル ボタン x x

 

マークアップ

各コンテキスト ポップアップ サブコントロールは、マークアップで個別に宣言する必要があります。

Mini-Toolbar

コンテキスト ポップアップ ミニ ツール バーにコントロールを追加する場合は、次の 2 つの推奨事項を考慮する必要があります。

  • コントロールは非常に認識可能であり、明らかな機能を提供する必要があります。 ラベルとツールヒントはMini-Toolbar コントロールでは公開されないため、使い慣れは重要です。
  • コントロールによって公開される各コマンドは、リボン UI の他の場所に表示する必要があります。 Mini-Toolbarでは、キーボード ナビゲーションはサポートされていません。

次の例では、3 つの Button コントロールを含む MiniToolbar 要素の基本的なマークアップを示します。

Note

ミニ ツール バーのコントロールの行ごとに 1 つの MenuGroup 要素を指定します。

 

<MiniToolbar Name="MiniToolbar">
  <MenuGroup>
    <Button CommandName="cmdButton1" />
    <Button CommandName="cmdButton2" />
    <Button CommandName="cmdButton3" />
  </MenuGroup>
</MiniToolbar>

コンテキスト メニュー

次の例では、3 つの Button コントロールを含む ContextMenu 要素の基本的なマークアップを示します。

Note

MenuGroup 要素内のコントロールの各セットは、コンテキスト メニューの水平バーで区切ります。

 

<ContextMenu Name="ContextMenu">
  <MenuGroup>
    <Button CommandName="cmdCut" />
    <Button CommandName="cmdCopy" />
    <Button CommandName="cmdPaste" />
  </MenuGroup>
</ContextMenu>

コンテキスト ポップアップには各サブコントロールの最大 1 つを含めることができますが、リボン マークアップ内の複数の ContextMenu 要素宣言と MiniToolbar 要素宣言が有効です。 これにより、アプリケーションは、アプリケーションによって定義された条件 (ワークスペース コンテキストなど) に基づいて、コンテキスト メニューとMini-Toolbar コントロールのさまざまな組み合わせをサポートできます。

詳細については、 ContextMap 要素に関するページを参照してください。

次の例では、 ContextPopup 要素の基本的なマークアップを示します。

<ContextPopup>
  <ContextPopup.MiniToolbars>
    <MiniToolbar Name="MiniToolbar">
      <MenuGroup>
        <Button CommandName="cmdButton1" />
        <Button CommandName="cmdButton2" />
        <Button CommandName="cmdButton3" />
      </MenuGroup>
    </MiniToolbar>
  </ContextPopup.MiniToolbars>
  <ContextPopup.ContextMenus>
    <ContextMenu Name="ContextMenu">
      <MenuGroup>
        <Button CommandName="cmdCut" />
        <Button CommandName="cmdCopy" />
        <Button CommandName="cmdPaste" />
      </MenuGroup>
    </ContextMenu>
  </ContextPopup.ContextMenus>
  <ContextPopup.ContextMaps>
    <ContextMap CommandName="cmdContextMap" ContextMenu="ContextMenu" MiniToolbar="MiniToolbar"/>
  </ContextPopup.ContextMaps>
</ContextPopup>

コード

コンテキスト ポップアップを呼び出すには、リボン アプリケーションの最上位ウィンドウがWM_CONTEXTMENU通知を受け取ったときに IUIContextualUI::ShowAtLocation メソッドが呼び出されます。

この例では、リボン アプリケーションの WndProc() メソッドでWM_CONTEXTMENU通知を処理する方法を示します。

case WM_CONTEXTMENU:
  POINT pt;
  POINTSTOPOINT(pt, lParam);

  // ShowContextualUI method defined by the application.
  ShowContextualUI (pt, hWnd);
  break;

次の例では、 IUIContextualUI::ShowAtLocation メソッドを使用して、リボン アプリケーションが特定の画面の場所にコンテキスト ポップアップを表示する方法を示します。

GetCurrentContext() の値は、前の cmdContextMap マークアップの例で定義されているように です。

g_pApplicationは、 IUIFramework インターフェイスへの参照です。

HRESULT ShowContextualUI(POINT& ptLocation, HWND hWnd)
{
  GetDisplayLocation(ptLocation, hWnd);

  HRESULT hr = E_FAIL;

  IUIContextualUI* pContextualUI = NULL;
 
  if (SUCCEEDED(g_pFramework->GetView(
                                g_pApplication->GetCurrentContext(), 
                                IID_PPV_ARGS(&pContextualUI))))
  {
    hr = pContextualUI->ShowAtLocation(ptLocation.x, ptLocation.y);
    pContextualUI->Release();
  }

  return hr;
}

IUIContextualUI への参照は、前の例に示すように、コンテキスト ポップアップが無視される前に解放できます。 ただし、メモリ リークを回避するには、ある時点で参照を解放する必要があります。

注意事項

Mini-Toolbarには、マウス ポインターの近接性に基づくフェード効果が組み込まれています。 このため、Mini-Toolbar可能な限りマウス ポインターの近くに表示することをお勧めします。 そうしないと、表示メカニズムが競合するため、Mini-Toolbarが期待どおりにレンダリングされないことがあります。

 

コンテキスト ポップアップのプロパティ

コンテキスト ポップアップ コントロールに関連付けられているプロパティ キーはありません。

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

ContextPopup サンプル