IContextMenu2
COM公式ドキュメント
Shell オブジェクトに関連付けられたショートカット(コンテキスト)メニューを作成またはマージするメソッドを公開します。IContextMenu を拡張し、クライアントオブジェクトがオーナー描画メニュー項目に関連するメッセージを処理できるようにするメソッドを追加します。
解説(Remarks)
このインターフェイスは、継承元である IContextMenu インターフェイスのメソッドも提供します。
実装するタイミング
お使いの名前空間拡張またはショートカットメニューハンドラーが次のメッセージのうち 1 つ以上を処理する必要がある場合は、IContextMenu2 を実装してください。 これらのメッセージが HandleMenuMsg メソッドを通じて IContextMenu2 に転送されるのは、IContextMenu2 インターフェイスポインターに対する QueryInterface 呼び出しが成功し、オブジェクトがこのインターフェイスをサポートしていることが示された場合のみです。使用するタイミング
通常、アプリケーションがこのインターフェイスを直接呼び出すことはありません。メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IContextMenu インターフェイスのクライアントオブジェクトが、オーナー描画メニュー項目に関連するメッセージを処理できるようにします。
| uMsg | DWORD | in | 処理するメッセージ。WM_INITMENUPOPUP、WM_DRAWITEM、WM_MENUCHAR、WM_MEASUREITEM などの一部のメッセージの場合、呼び出されるクライアントオブジェクトがオーナー描画メニュー項目を提供することがあります。 |
| wParam | WPARAM | in | 追加のメッセージ情報。このパラメーターの値は、uMsg パラメーターの値によって異なります。 |
| lParam | LPARAM | in | 追加のメッセージ情報。このパラメーターの値は、uMsg パラメーターの値によって異なります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
IContextMenu2::HandleMenuMsg は一般に HandleMenuMsg2 に置き換えられます。HandleMenuMsg2 は、IContextMenu が IContextMenu3 がサポートされていると判断し、uMsg パラメーターの説明で指定されたメッセージのいずれかを受け取ったときに呼び出されます。ただし、場合によっては IContextMenu2::HandleMenuMsg が依然として呼び出されることもあります。
IContextMenu2 または IContextMenu3 が必要な場合、新しいコンテキストメニューにおける最善の実装は、すべてのロジックを HandleMenuMsg2 に実装し、IContextMenu2::HandleMenuMsg の実装では単にその呼び出しを HandleMenuMsg2 に委譲し、plResult パラメーターとして NULL を渡すことです。
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 指定が可能。