Win32 API 日本語リファレンス
ホームUI.Ribbon › IUIApplication

IUIApplication

COM
IIDd428903c-729a-491d-910d-682a08ff2522継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IUIApplication インターフェイスはアプリケーション側で実装し、Windows リボン フレームワークのコールバック エントリ ポイント メソッドを定義します。

メソッド 3

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT OnViewChanged(DWORD viewId, UI_VIEWTYPE typeID, IUnknown* view, UI_VIEWVERB verb, INT uReasonCode)

View の状態が変化したときに呼び出されます。

viewIdDWORDinView の ID。 有効な値は 0 のみです。
typeIDUI_VIEWTYPEinアプリケーションがホストする UI_VIEWTYPE
viewIUnknown*inView インターフェイスへのポインター。
verbUI_VIEWVERBinView が実行した UI_VIEWVERB (アクション)。
uReasonCodeINTin未定義です。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラー コードを返します。

解説(Remarks)

このコールバック通知は、View の状態が変化するたびにフレームワークからホスト アプリケーションへ送信されます。

重要 このコールバックは、viewId が 0 の リボン View に対してのみ発生します。
IUIApplication::OnViewChanged は、ホスト アプリケーションの起動時にリボンのプロパティを初期化する、アプリケーション ウィンドウのサイズ変更などのユーザー操作に応じてリボンのプロパティを変更する、アプリケーションの終了時にリボンのプロパティを取得する、といった用途に役立ちます。

次の例は、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;
}
vtbl 4 HRESULT OnCreateUICommand(DWORD commandId, UI_COMMANDTYPE typeID, IUICommandHandler** commandHandler)

Windows リボン フレームワークのマークアップで指定された各コマンドについて、そのコマンドを IUICommandHandler にバインドするために呼び出されます。

commandIdDWORDinマークアップ リソース ファイルで指定されたコマンドの ID。
typeIDUI_COMMANDTYPEin特定のコントロールに関連付けられたコマンドの種類
commandHandlerIUICommandHandler**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;
}
vtbl 5 HRESULT OnDestroyUICommand(DWORD commandId, UI_COMMANDTYPE typeID, IUICommandHandler* commandHandler)

アプリケーション ウィンドウが破棄されるときに、Windows リボン フレームワークのマークアップで指定された各コマンドについて呼び出されます。

commandIdDWORDinマークアップ リソース ファイルで指定されたコマンドの ID。
typeIDUI_COMMANDTYPEin特定のコントロールに関連付けられたコマンドの種類
commandHandlerIUICommandHandler*inoptionalIUICommandHandler オブジェクトへのポインター。この値は 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 の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。