コンテキスト ポップアップ
コンテキスト ポップアップは、Windows リボン フレームワークの ContextPopup ビュー のプリンシパル コントロールです。 これは、リボン実装の拡張機能としてフレームワークによってのみ公開されるリッチ コンテキスト メニュー システムです。フレームワークは、コンテキスト ポップアップを独立したコントロールとして公開しません。
コンテキスト ポップアップのコンポーネント
コンテキスト ポップアップは、 ContextMenu マークアップ要素と MiniToolbar マークアップ要素を通じて公開されるコンテキスト メニューとMini-Toolbarサブコントロールの論理コンテナーです。
- ContextMenu は、コマンドとギャラリーのメニューを公開します。
- MiniToolbar は、さまざまなコマンド、ギャラリー、およびフォント コントロールやコンボ ボックスなどの複雑なコントロールのフローティング ツール バーを公開します。
各サブコントロールは、コンテキスト ポップアップに最大で 1 回表示できます。
次のスクリーン ショットは、コンテキスト ポップアップとその構成要素のサブコントロールを示しています。
コンテキスト ポップアップは純粋に概念的であり、配置やサイズ設定などの 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が期待どおりにレンダリングされないことがあります。
コンテキスト ポップアップのプロパティ
コンテキスト ポップアップ コントロールに関連付けられているプロパティ キーはありません。
関連トピック