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

IContextMenu2

COM
IID000214f4-0000-0000-c000-000000000046継承元IContextMenu自前メソッド開始 vtbl6

公式ドキュメント

Shell オブジェクトに関連付けられたショートカット(コンテキスト)メニューを作成またはマージするメソッドを公開します。IContextMenu を拡張し、クライアントオブジェクトがオーナー描画メニュー項目に関連するメッセージを処理できるようにするメソッドを追加します。

解説(Remarks)

このインターフェイスは、継承元である IContextMenu インターフェイスのメソッドも提供します。

注意 Windows Vista 以降。 Windows Vista より前では、このインターフェイスは Shlobj.h で宣言されていました。

実装するタイミング

お使いの名前空間拡張またはショートカットメニューハンドラーが次のメッセージのうち 1 つ以上を処理する必要がある場合は、IContextMenu2 を実装してください。 これらのメッセージが HandleMenuMsg メソッドを通じて IContextMenu2 に転送されるのは、IContextMenu2 インターフェイスポインターに対する QueryInterface 呼び出しが成功し、オブジェクトがこのインターフェイスをサポートしていることが示された場合のみです。

使用するタイミング

通常、アプリケーションがこのインターフェイスを直接呼び出すことはありません。

メソッド 1

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

vtbl 6 HRESULT HandleMenuMsg(DWORD uMsg, WPARAM wParam, LPARAM lParam)

IContextMenu インターフェイスのクライアントオブジェクトが、オーナー描画メニュー項目に関連するメッセージを処理できるようにします。

uMsgDWORDin処理するメッセージ。WM_INITMENUPOPUPWM_DRAWITEMWM_MENUCHARWM_MEASUREITEM などの一部のメッセージの場合、呼び出されるクライアントオブジェクトがオーナー描画メニュー項目を提供することがあります。
wParamWPARAMin追加のメッセージ情報。このパラメーターの値は、uMsg パラメーターの値によって異なります。
lParamLPARAMin追加のメッセージ情報。このパラメーターの値は、uMsg パラメーターの値によって異なります。

戻り値

型: HRESULT

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

解説(Remarks)

IContextMenu2::HandleMenuMsg は一般に HandleMenuMsg2 に置き換えられます。HandleMenuMsg2 は、IContextMenuIContextMenu3 がサポートされていると判断し、uMsg パラメーターの説明で指定されたメッセージのいずれかを受け取ったときに呼び出されます。ただし、場合によっては IContextMenu2::HandleMenuMsg が依然として呼び出されることもあります。

IContextMenu2 または IContextMenu3 が必要な場合、新しいコンテキストメニューにおける最善の実装は、すべてのロジックを HandleMenuMsg2 に実装し、IContextMenu2::HandleMenuMsg の実装では単にその呼び出しを HandleMenuMsg2 に委譲し、plResult パラメーターとして NULL を渡すことです。

注意 IContextMenu3 が実装されていない場合、代わりに IContextMenu2 が呼び出される保証はありません。場合によっては、IContextMenu3 がないと判断された時点で処理が停止されます。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IContextMenu2 "{000214F4-0000-0000-C000-000000000046}"
#usecom global IContextMenu2 IID_IContextMenu2 "{}"
#comfunc global IContextMenu2_HandleMenuMsg  6 int,sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。