IContextMenuProvider
COM公式ドキュメント
IContextMenuProvider インターフェイスは、新しいコンテキストメニューを作成し、それらのメニューに項目を追加し、拡張機能がそれらのメニューを拡張できるようにし、生成されたコンテキストメニューを表示するためのメソッドを実装します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IContextMenuProvider::EmptyMenuList メソッドは、コンテキストメニューをクリアします。
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
解説(Remarks)
IContextMenuProvider::ShowContextMenu は、コンテキストメニューを表示した後、自動的にそれをクリアします。ただし、コンテキストメニューの作成を開始する前に EmptyMenuList を呼び出すことをお勧めします。
IContextMenuProvider::AddPrimaryExtensionItems メソッドは、特定の 1 つの拡張機能が、このコンテキストメニューに定義された挿入ポイントに項目を追加できるようにします。
| piExtension | IUnknown* | in | プライマリ拡張機能の IExtendContextMenu インターフェイスを実装するオブジェクト上の IUnknown インターフェイスへのポインター。 |
| piDataObject | IDataObject* | in | コンテキストメニューが拡張されるオブジェクト上の IDataObject インターフェイスへのポインター。 |
戻り値
指定したスナップインによる IExtendContextMenu::AddMenuItems の実装によっては、他の値が返されることがあります。
IContextMenuProvider::AddThirdPartyExtensionItems メソッドは、サードパーティの拡張機能が、このコンテキストメニュー内の指定した挿入ポイントに項目を追加できるようにします。
| piDataObject | IDataObject* | in | メニューが拡張されるオブジェクト上の IDataObject インターフェイスへのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
IContextMenuProvider::ShowContextMenu メソッドは、コンテキストメニューを表示します。
| hwndParent | HWND | in | コンテキストメニューが表示される親ウィンドウへのハンドル。 |
| xPos | INT | in | コンテキストメニューの左上隅の水平位置をスクリーン座標で指定する値。 |
| yPos | INT | in | コンテキストメニューの左上隅の垂直位置をスクリーン座標で指定する値。 |
| plSelected | INT* | out | 選択されたメニュー項目の ICommandID 値( IContextMenuCallback::AddItem に渡された値)を指定する値。これが 0 の場合、コンテキストメニュー項目が 1 つも選択されなかったか、選択されたコンテキストメニュー項目が拡張機能によって追加されたかのいずれかです。拡張機能の項目が選択された場合、 ShowContextMenu は IExtendContextMenu::Command を呼び出して拡張機能に通知します。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
解説(Remarks)
ShowContextMenu は、コンテキストメニューを表示した後、自動的にそれをクリアします。コンテキストメニューの作成を開始する前に IContextMenuProvider::EmptyMenuList を呼び出すことをお勧めします。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IContextMenuProvider "{43136EB6-D36C-11CF-ADBC-00AA00A80033}" #usecom global IContextMenuProvider IID_IContextMenuProvider "{}" #comfunc global IContextMenuProvider_EmptyMenuList 4 #comfunc global IContextMenuProvider_AddPrimaryExtensionItems 5 sptr,sptr #comfunc global IContextMenuProvider_AddThirdPartyExtensionItems 6 sptr #comfunc global IContextMenuProvider_ShowContextMenu 7 sptr,int,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IContextMenuProvider "{43136EB6-D36C-11CF-ADBC-00AA00A80033}" #usecom global IContextMenuProvider IID_IContextMenuProvider "{}" #comfunc global IContextMenuProvider_EmptyMenuList 4 #comfunc global IContextMenuProvider_AddPrimaryExtensionItems 5 sptr,sptr #comfunc global IContextMenuProvider_AddThirdPartyExtensionItems 6 sptr #comfunc global IContextMenuProvider_ShowContextMenu 7 sptr,int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。