IUIApplication
COM公式ドキュメント
IUIApplication インターフェイスはアプリケーション側で実装し、Windows リボン フレームワークのコールバック エントリ ポイント メソッドを定義します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
View の状態が変化したときに呼び出されます。
| viewId | DWORD | in | View の ID。 有効な値は 0 のみです。 |
| typeID | UI_VIEWTYPE | in | アプリケーションがホストする UI_VIEWTYPE。 |
| view | IUnknown* | in | View インターフェイスへのポインター。 |
| verb | UI_VIEWVERB | in | View が実行した UI_VIEWVERB (アクション)。 |
| uReasonCode | INT | in | 未定義です。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラー コードを返します。
解説(Remarks)
このコールバック通知は、View の状態が変化するたびにフレームワークからホスト アプリケーションへ送信されます。
例
次の例は、IUIApplication::OnViewChanged メソッドの基本的な実装を示しています。
//
// FUNCTION: OnViewChanged(UINT, UI_VIEWTYPE, IUnknown*, UI_VIEWVERB, INT)
//
// PURPOSE: Called when the state of a View (Ribbon is a view) changes - like created/destroyed/resized.
//
// PARAMETERS:
// viewId - The View identifier.
// typeID - The View type.
// pView - Pointer to the View interface.
// verb - The action performed by the View.
// uReasonCode - Not defined.
//
// COMMENTS:
//
// For this sample, return the same command handler for all commands
// specified in the .xml file.
//
//
STDMETHODIMP CApplication::OnViewChanged(
UINT viewId,
UI_VIEWTYPE typeId,
IUnknown* pView,
UI_VIEWVERB verb,
INT uReasonCode)
{
HRESULT hr = E_NOTIMPL;
// Checks to see if the view that was changed was a Ribbon view.
if (UI_VIEWTYPE_RIBBON == typeId)
{
switch (verb)
{
// The view was newly created.
case UI_VIEWVERB_CREATE:
_cwprintf(L"IUIApplication::OnViewChanged called with verb=CREATE\r\n");
if (NULL == g_pRibbon)
{
// Retrieve and store the IUIRibbon
hr = pView->QueryInterface(&g_pRibbon);
}
break;
// The view was resized.
// In the case of the Ribbon view, the application should call
// GetHeight() to determine the height of the Ribbon.
case UI_VIEWVERB_SIZE:
_cwprintf(L"IUIApplication::OnViewChanged called with verb=SIZE\r\n");
// Call to the framework to determine the height of the Ribbon.
if (NULL != g_pRibbon)
{
UINT uRibbonHeight;
hr = g_pRibbon->GetHeight(&uRibbonHeight);
}
if (!SUCCEEDED(hr))
{
//_cwprintf(L"IUIRibbon::GetHeight() failed with hr=0x%X\r\n", hr);
}
break;
// The view was destroyed.
case UI_VIEWVERB_DESTROY:
//_cwprintf(L"IUIApplication::OnViewChanged called with verb=DESTROY\r\n");
g_pRibbon = NULL;
hr = S_OK;
break;
}
}
return hr;
}
Windows リボン フレームワークのマークアップで指定された各コマンドについて、そのコマンドを IUICommandHandler にバインドするために呼び出されます。
| commandId | DWORD | in | マークアップ リソース ファイルで指定されたコマンドの ID。 |
| typeID | UI_COMMANDTYPE | in | 特定のコントロールに関連付けられたコマンドの種類。 |
| commandHandler | IUICommandHandler** | out | このメソッドから制御が戻るとき、 IUICommandHandler オブジェクトへのポインターのアドレスが格納されます。このオブジェクトは、1 つ以上のコマンドにバインドされるホスト アプリケーションのコマンド ハンドラーです。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラー コードを返します。
解説(Remarks)
このコールバック通知は、マークアップ リソース ファイルの処理中に検出された各コマンド宣言について、リボン フレームワークからホスト アプリケーションへ送信されます。
リボンのマークアップで指定された各コマンドに対して、リボン フレームワークはホスト アプリケーション側のコマンド ハンドラーを必要とします。 各コマンドには、新規または既存のハンドラーを割り当てる必要があります。
例
次の例は、IUIApplication::OnCreateUICommand メソッドの基本的な実装を示しています。
//
// FUNCTION: OnCreateUICommand(UINT, UI_COMMANDTYPE, IUICommandHandler)
//
// PURPOSE: Called by the Ribbon framework for each command specified in markup to allow
// the host application to bind a command handler to that command.
//
// PARAMETERS:
// nCmdID - The Command identifier.
// typeID - The Command type.
// ppCommandHandler - Pointer to the address of the Command handler.
//
// COMMENTS:
//
// For this sample, return the same command handler for all commands
// specified in the .xml file.
//
//
STDMETHODIMP CApplication::OnCreateUICommand(
UINT nCmdID,
UI_COMMANDTYPE typeID,
IUICommandHandler** ppCommandHandler)
{
HRESULT hr = E_NOTIMPL;
switch(typeID)
{
case UI_COMMANDTYPE_DECIMAL:
{
_cwprintf(L"IUIApplication::OnCreateUICommand called for Spinner.\r\n");
hr = _spSpinnerSite->QueryInterface(IID_PPV_ARGS(ppCommandHandler));
break;
}
default:
{
_cwprintf(L"IUIApplication::OnCreateUICommand called with CmdID=%u, typeID=%u.\r\n", nCmdID, typeID);
hr = _spCommandHandler->QueryInterface(IID_PPV_ARGS(ppCommandHandler));
}
}
return hr;
}
アプリケーション ウィンドウが破棄されるときに、Windows リボン フレームワークのマークアップで指定された各コマンドについて呼び出されます。
| commandId | DWORD | in | マークアップ リソース ファイルで指定されたコマンドの ID。 |
| typeID | UI_COMMANDTYPE | in | 特定のコントロールに関連付けられたコマンドの種類。 |
| commandHandler | IUICommandHandler* | inoptional | IUICommandHandler オブジェクトへのポインター。この値は NULL の場合があります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラー コードを返します。
解説(Remarks)
このコールバック通知は、マークアップ リソース ファイル内の各コマンド宣言について、リボン フレームワークからホスト アプリケーションへ送信されます。
各コマンドに関連付けられたホスト アプリケーション内のすべてのリソースが解放されます。
例
次の例は、IUIApplication::OnDestroyUICommand メソッドの基本的な実装を示しています。
//
// FUNCTION: OnDestroyUICommand(UINT, UI_COMMANDTYPE, IUICommandHandler*)
//
// PURPOSE: Called for each Command specified in the Ribbon markup
// when the Ribbon host application window is destroyed.
//
// PARAMETERS:
// nCmdID - The Command identifier.
// typeID - The Command type.
// commandHandler - The Command handler.
//
// COMMENTS:
//
//
STDMETHODIMP CApplication::OnDestroyUICommand(
UINT32 nCmdID,
UI_COMMANDTYPE typeID,
IUICommandHandler* commandHandler)
{
return E_NOTIMPL;
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IUIApplication "{D428903C-729A-491D-910D-682A08FF2522}"
#usecom global IUIApplication IID_IUIApplication "{}"
#comfunc global IUIApplication_OnViewChanged 3 int,int,sptr,int,int
#comfunc global IUIApplication_OnCreateUICommand 4 int,int,sptr
#comfunc global IUIApplication_OnDestroyUICommand 5 int,int,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。