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

IPreviewHandlerFrame

COM
IIDfec87aaf-35f9-447a-adb7-20234491401a継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

プレビューハンドラーがキーボードショートカットをホストへ渡せるようにします。このインターフェイスは、キーボードショートカットの一覧を取得し、キーボードショートカットの処理をホストに指示します。

解説(Remarks)

これは、プレビューハンドラーがキーボードショートカットをホストへ伝えるために使用するインターフェイスです。プレビューハンドラーは、SetSite にパラメーターとして渡されたポインターに対して QueryInterface を呼び出すことで、このインターフェイスを取得します。プレビューハンドラーがこのインターフェイスを実装する必要はありません。

メソッド 2

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

vtbl 3 HRESULT GetWindowContext(PREVIEWHANDLERFRAMEINFO* pinfo)

プレビューホスト用のキーボードショートカットの一覧を取得します。

pinfoPREVIEWHANDLERFRAMEINFO*outアクセラレーターテーブル情報を受け取る PREVIEWHANDLERFRAMEINFO 構造体へのポインター。

戻り値

型: HRESULT

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

解説(Remarks)

アクセラレーターテーブルは、キーボードショートカットと、ホストが実行すべきコマンドの一覧です。最適化として、プレビューハンドラーは受け取ったキーストロークを確認し、それをアクセラレーターテーブルと照合してホストが関心を持つかどうかを判定し、必要に応じてそれを転送しつつ、構造体内のコマンドは無視することができます。IPreviewHandlerFrame::GetWindowContext から返されるアクセラレーターテーブルには、キーストロークのみが含まれ、有効なコマンドエントリは含まれません。プレビューハンドラーは、この最適化を省略し、すべてのキーストロークに対して単純に IPreviewHandlerFrame::TranslateAccelerator を呼び出すこともできます。プレビューハンドラーが破棄されるときには、アクセラレーターテーブルを DestroyAcceleratorTable 関数を使用して解放する必要があります。

このメソッドは、プレビューハンドラーが SetSite を呼び出し、その結果がプレビューハンドラーによって後で使用するためにキャッシュされた時点で呼び出す必要があります。このメソッドは、低整合性モードで実行されているプレビューハンドラーからは呼び出せません。そのようなプレビューハンドラーは、すべてのキーストロークに対して常に IPreviewHandlerFrame::TranslateAccelerator を呼び出す必要があります。

vtbl 4 HRESULT TranslateAccelerator(MSG* pmsg)

プレビューハンドラーから渡されたキーボードショートカットを処理するようホストに指示します。

pmsgMSG*inキーボードショートカットに対応する WM_COMMAND または WM_SYSCOMMAND ウィンドウメッセージへのポインター。

戻り値

型: HRESULT

そのキーボードショートカットがホストの処理対象である場合、ホストはそれを処理して S_OK を返します。それ以外の場合は S_FALSE を返します。

解説(Remarks)

注意 このメソッドは、TranslateAccelerator 呼び出しに応答して、プレビューハンドラーからのみ呼び出されます。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IPreviewHandlerFrame "{FEC87AAF-35F9-447A-ADB7-20234491401A}"
#usecom global IPreviewHandlerFrame IID_IPreviewHandlerFrame "{}"
#comfunc global IPreviewHandlerFrame_GetWindowContext      3 var
#comfunc global IPreviewHandlerFrame_TranslateAccelerator  4 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。