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

IContextMenu3

COM
IIDbcfce0a0-ec17-11d0-8d10-00a0c90f2719継承元IContextMenu2自前メソッド開始 vtbl7

公式ドキュメント

Shell オブジェクトに関連付けられたショートカットメニューを作成またはマージするメソッドを公開します。クライアントオブジェクトがオーナードローメニュー項目に関連するメッセージを処理できるようにし、そのメッセージ処理からの戻り値を受け取れるようにすることで IContextMenu2 を拡張します。

解説(Remarks)

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

実装するタイミング

ショートカットメニュー拡張が WM_MENUCHAR メッセージを処理する必要がある場合は、IContextMenu3 を実装してください。

このメッセージが IContextMenu3::HandleMenuMsg2 に転送されるのは、IContextMenu3 インターフェイスポインターに対する QueryInterface 呼び出しが成功した場合のみです。これはオブジェクトがこのインターフェイスをサポートしていることを示します。

使用するタイミング

このインターフェイスを直接呼び出すことはありません。IContextMenu3 は、アプリケーションがこのインターフェイスを認識していることをオペレーティングシステムが確認した場合にのみ、オペレーティングシステムによって使用されます。
注意 Windows Vista 以降。 Windows Vista より前では、このインターフェイスは Shlobj.h で宣言されていました。

メソッド 1

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

vtbl 7 HRESULT HandleMenuMsg2(DWORD uMsg, WPARAM wParam, LPARAM lParam, LRESULT* plResult)

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

uMsgDWORDin処理するメッセージ。WM_INITMENUPOPUPWM_DRAWITEMWM_MENUCHARWM_MEASUREITEM などの一部のメッセージの場合、呼び出されるクライアントオブジェクトがオーナードローメニュー項目を提供することがあります。
wParamWPARAMin追加のメッセージ情報。このパラメーターの値は uMsg パラメーターの値に依存します。
lParamLPARAMin追加のメッセージ情報。このパラメーターの値は uMsg パラメーターの値に依存します。
plResultLRESULT*outoptionalメニューのオーナーがメッセージから返す LRESULT 値のアドレス。このパラメーターは NULL にすることができます。

戻り値

種類: HRESULT

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

解説(Remarks)

IContextMenu3::HandleMenuMsg2 は一般に IContextMenu2::HandleMenuMsg を置き換えるものであり、IContextMenuIContextMenu3 がサポートされていると判断し、サポートされているメッセージ(uMsg を参照)のいずれかを受信したときに呼び出されます。ただし、場合によっては IContextMenu2::HandleMenuMsg が引き続き呼び出されることもあります。コンテキストメニューのホストは、いずれか一方または両方のメソッドを通じてメニューメッセージをディスパッチする可能性があります。したがって、Shell 拡張が IContextMenu2::HandleMenuMsgIContextMenu3::HandleMenuMsg2 の両方を実装している場合は、どちらのメソッドを通じてもメニューメッセージが到着することに備えておく必要があります。

注意 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_IContextMenu3 "{BCFCE0A0-EC17-11D0-8D10-00A0C90F2719}"
#usecom global IContextMenu3 IID_IContextMenu3 "{}"
#comfunc global IContextMenu3_HandleMenuMsg2  7 int,sptr,sptr,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。