リボンの状態の保持
Windows Ribon フレームワーク (リボン) では、アプリケーション セッション間でさまざまなユーザー設定と基本設定の状態を保持する機能が提供されます。
はじめに
ユーザーは、実行時にリボンのさまざまな側面 (構成や操作の基本設定など) をカスタマイズして、使いやすさと生産性を向上させることができます。 リボン フレームワークには、IUIRibbon インターフェイスの実装で定義されている 2 つのメソッド (IUIRibbon::LoadSettingsFromStream と IUIRibbon::SaveSettingsToStream) を使用して、アプリケーション セッション間でこれらの設定を保持する機能が用意されています。
予測可能なエクスペリエンス
リボン ユーザー エクスペリエンス ガイドラインでは、可能な限り最も予測可能なユーザー エクスペリエンスを提供するために、リボン アプリケーションは、アプリケーションを閉じると、リボンの状態 (最後に選択したタブを除く) を保持する必要があることをお勧めします。 このようにして、同じアプリケーションが起動されると、前のセッションの設定とカスタマイズを復元でき、ユーザーはアプリケーションを離れたのと同じ方法で引き続きやり取りすることが期待できます。
実行時に変更でき、アプリケーション セッション間で保持できるリボン設定は、[コマンド] コンテキスト メニューに一覧表示されます。 これには次のようなものがあります。
ユーザーによって [クイック アクセス ツール バー コマンド] リストに追加されたコマンド。 UI_PKEY_ItemsSource プロパティ キーを使用して IUICollection オブジェクトによって指定されます。
次のスクリーン ショットは、[ クイック アクセス ツール バーに追加] コンテキスト メニュー コマンドを示しています。
優先する クイック アクセス ツール バー のドッキング状態。 UI_PKEY_QuickAccessToolbarDock プロパティ キーのUI_CONTROLDOCK値で指定します。
このスクリーン ショットでは、既定のアプリケーション タイトル バーの場所に クイック アクセス ツール バー が表示され、リボン コンテキスト メニューコマンド の下に [クイック アクセス ツール バーを表示 ] が表示されます。
このスクリーン ショットは、リボンの下にある クイック アクセス ツール バー を示しています。
UI_PKEY_Minimized プロパティ キーのブール値で指定されたリボンの最小化状態。
Note
リボンの最小化状態は、リボンの折りたたまれた状態と同じではありません。 折りたたまれた状態の場合、リボンは完全に非表示になり、操作できません。 この状態は、アプリケーション ウィンドウのサイズが水平方向または垂直方向に縮小され、リボンによってアプリケーション ワークスペースが隠される位置まで自動的に呼び出されます。 アプリケーション ウィンドウのサイズが大きくなると、フレームワークによってリボンが復元されます。
このスクリーン ショットは、[ リボンの最小化] コンテキスト メニュー コマンドを示しています。
このスクリーン ショットは、最小化されたリボンを示しています。
リボンの設定を保存する
IUIRibbon::SaveSettingsToStream メソッドは、(前のセクションで説明した) 永続的なリボン状態のバイナリ表現を IStream オブジェクトに書き込みます。 その後、アプリケーションは IStream オブジェクトの内容をファイルまたは Windows レジストリに保存します。
次の例では、IUIRibbon::SaveSettingsToStream メソッドを使用して IStream オブジェクトにリボンの状態を書き込むのに必要な基本的なコードを示します。
// pRibbon - Pointer to the IUIRibbon interface
// ppStatusStream - Pointer to the location of a newly created IStream object
HRESULT CApplication::SaveRibbonStatusToStream(
__in IUIRibbon *pRibbon,
__out IStream **ppStatusStream)
{
HRESULT hr = E_FAIL;
*ppStatusStream = NULL;
IStream* pStream;
if (SUCCEEDED(hr = CreateStreamOnHGlobal(
NULL, // Internally allocate a new shared memory.
FALSE, // Free hGlobal after IStream object released.
&pStream)))
{
if (SUCCEEDED(hr = pRibbon->SaveSettingsToStream(*ppStatusStream)))
{
pStream->AddRef();
*ppStatusStream = pStream;
}
pStream->Release();
}
return hr;
}
リボンの設定を読み込む
IUIRibbon::LoadSettingsFromStream メソッドは、IUIRibbon::SaveSettingsToStream メソッドによって IStream オブジェクトとして格納されている永続的なリボン状態情報を取得するために使用されます。 IStream オブジェクトの情報は、アプリケーションの初期化時にリボン UI に適用されます。
次の例では、IUIRibbon::LoadSettingsFromStream メソッドを使用して IStream オブジェクトからリボンの状態を読み込むのに必要な基本的なコードを示します。
// pRibbon - Pointer to the IUIRibbon interface
// pStatusStream - Pointer to the IStream object that contains the Ribbon state information
HRESULT CApplication::LoadRibbonStatusFromStream(
__in IUIRibbon *pRibbon,
__in IStream *pStatusStream)
{
HRESULT hr = E_FAIL;
if (pStatusStream)
{
// Set the stream position to the beginning first.
LARGE_INTEGER liStart = {0, 0};
ULARGE_INTEGER ulActual;
pStatusStream->Seek(liStart, STREAM_SEEK_SET, &ulActual);
hr = pRibbon->LoadSettingsFromStream(pStatusStream);
}
return hr;
}
最適なパフォーマンスを得るための IUIRibbon::LoadSettingsFromStream メソッドは、次の例に示すように、フレームワークの初期化フェーズ中に IUIApplication::OnViewChanged コールバック関数から呼び出す必要があります。
IFACEMETHODIMP CMyRibbonApplication::OnViewChanged(
UINT nViewID,
__in UI_VIEWTYPE typeID,
__in IUnknown* pView,
UI_VIEWVERB verb,
INT iReasonCode)
{
HRESULT hr = E_NOTIMPL;
if (UI_VIEWVERB_CREATE == verb)
{
IUIRibbon* pRibbon = NULL;
hr = pView->QueryInterface(IID_PPV_ARGS(&pRibbon));
if (SUCCEEDED(hr))
{
hr = _LoadRibbonSettings(pRibbon);
pRibbon->Release();
}
}
return hr;
}
HRESULT CMyRibbonApplication::_LoadRibbonSettings(IUIRibbon* pRibbon)
{
...
pRibbon->LoadSettingsFromStream(pStream);
...
}
同じリボン フレームワーク アプリケーションの複数のインスタンスは、各リボンの状態を個別の IStream オブジェクトとして、または 1 つの IStream オブジェクトを介してグループとして個別に管理できます。
アプリケーション インスタンスのグループ間でリボンの状態を同期する場合、各最上位ウィンドウは WM_ACTIVATE 通知をリッスンする必要があります。 非アクティブ化されている最上位ウィンドウは 、IUIRibbon::SaveSettingsToStream メソッドを使用してリボンの状態を保存し、アクティブ化される最上位ウィンドウは IUIRibbon::LoadSettingsFromStream メソッドを使用してリボンの状態を読み込みます。
関連トピック