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

IContextMenuSite

COM
IID0811aebe-0b87-4c54-9e72-548cf649016b継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

SHCreateShellFolderView を使用して作成される既定のフォルダービューによって実装されます。

解説(Remarks)

このインターフェイスの IID は IID_IContextMenuSite です。

フォルダービューのサイトチェーン内に存在するコンテキストメニューサイトのポインターを取得するには、SID_SFolderView を指定した QueryService を使用してフォルダービューを取得します。

CComPtr<IContextMenuSite> spcms;
hr = IUnknown_QueryService(_punkSite, SID_SFolderView, IID_PPV_ARGS(&spcms));

if (SUCCEEDED(hr))
{
    ...
}

メソッド 1

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

vtbl 3 HRESULT DoContextMenuPopup(IUnknown* punkContextMenu, DWORD fFlags, POINT pt)

DoContextMenuPopup は Windows Server 2003 以降では使用できません。

punkContextMenuIUnknown*inショートカットメニューの IUnknown 実装へのポインターです。
fFlagsDWORDin

ショートカットメニューをどのように変更できるかを指定するオプションのフラグです。このパラメーターには、以下の値の任意の組み合わせを設定できます。下位ワードの残りのビットはシステムによって予約されています。上位ワードはコンテキスト固有の通信に使用できます。CMF_RESERVED 値は下位ワードをマスクするために使用できます。

CMF_NORMAL (0x00000000)

0x00000000。通常の動作を示します。ショートカットメニュー拡張、名前空間拡張、またはドラッグアンドドロップハンドラーは、すべてのメニュー項目を追加できます。

CMF_DEFAULTONLY (0x00000001)

0x00000001。このフラグは、ユーザーが既定のアクションをアクティブ化しているとき(通常はダブルクリック)に設定されます。このフラグは、メニュー内の既定の項目を変更しない場合には何も追加しないように、ショートカットメニュー拡張へのヒントを提供します。この値が指定された場合、ショートカットメニュー拡張やドラッグアンドドロップハンドラーはメニュー項目を追加すべきではありません。名前空間拡張は、既定の項目(存在する場合)のみを追加すべきです。

CMF_VERBSONLY (0x00000002)

0x00000002。このフラグは、ショートカットメニューがショートカットオブジェクトに対するものである場合に設定されます。ショートカットメニューハンドラーはこの値を無視すべきです。

CMF_EXPLORE (0x00000004)

0x00000004。このフラグは、Windows エクスプローラーのツリーウィンドウが存在する場合に設定されます。

CMF_NOVERBS (0x00000008)

0x00000008。このフラグは、送るメニューに表示される項目に対して設定されます。ショートカットメニューハンドラーはこの値を無視すべきです。

CMF_CANRENAME (0x00000010)

0x00000010。このフラグは、呼び出し元のアプリケーションが項目の名前変更をサポートしている場合に設定されます。ショートカットメニュー拡張やドラッグアンドドロップハンドラーはこのフラグを無視すべきです。名前空間拡張は、該当する場合、名前変更項目をメニューに追加すべきです。

CMF_NODEFAULT (0x00000020)

0x00000020。このフラグは、メニュー内のどの項目も既定として設定されていない場合に設定されます。ドラッグアンドドロップハンドラーはこのフラグを無視すべきです。名前空間拡張は、いずれのメニュー項目も既定に設定すべきではありません。

CMF_INCLUDESTATIC (0x00000040)

この値は使用できません。

Windows Server 2003 および Windows XP: 0x00000040。このフラグは、静的メニューが構築されているときに設定されます。ブラウザーのみがこのフラグを使用すべきです。その他すべてのショートカットメニュー拡張はこのフラグを無視すべきです。

CMF_ITEMMENU (0x00000080)

0x00000080。このフラグは、呼び出し元のアプリケーションがビュー内の項目(ビューの背景に対してではなく)に対してコンテキストメニューを呼び出すときに設定されます。

Windows Server 2003 および Windows XP: この値は使用できません。

CMF_EXTENDEDVERBS (0x00000100)

0x00000100。このフラグは、呼び出し元のアプリケーションが拡張動詞を要求するときに設定されます。ユーザーがオブジェクトを右クリックすると、通常の動詞が表示されます。拡張動詞を表示するには、ユーザーは SHIFT キーを押しながら右クリックする必要があります。

CMF_DISABLEDVERBS (0x00000200)

0x00000200。このフラグは、呼び出し元のアプリケーションがレガシーメニューなど、通常は無効化されている動詞を呼び出そうとするときに設定されます。

Windows Server 2003 および Windows XP: この値は使用できません。

CMF_ASYNCVERBSTATE (0x00000400)

0x00000400。このフラグは、動詞の状態を非同期に評価できる場合に設定されます。

Windows Server 2008、Windows Vista、Windows Server 2003 および Windows XP: この値は使用できません。

CMF_OPTIMIZEFORINVOKE (0x00000800)

0x00000800。正規の動詞名を介した動詞の呼び出しをサポートしないコンテキストメニューハンドラーに対して、その IContextMenu::QueryContextMenu 実装内でその処理をバイパスするように通知します。

Windows Server 2008、Windows Vista、Windows Server 2003 および Windows XP: この値は使用できません。

CMF_SYNCCASCADEMENU (0x00001000)

0x00001000。

Windows Server 2008、Windows Vista、Windows Server 2003 および Windows XP: この値は使用できません。

CMF_DONOTPICKDEFAULT (0x00002000)

0x00001000。動詞が明示的に指定されていない場合、その代わりに既定の動詞を使用しません。

Windows Server 2008、Windows Vista、Windows Server 2003 および Windows XP: この値は使用できません。

CMF_RESERVED (0xffff0000)

0xffff0000。このフラグは、使用すべきでないすべてのビットを指定するビットマスクです。これはマスクとしてのみ使用してください。パラメーター値として渡さないでください。

ptPOINTinショートカットメニューを表示する位置です。この点は、画面座標におけるメニューの左上隅の位置を指定します。

戻り値

型: HRESULT

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

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IContextMenuSite "{0811AEBE-0B87-4C54-9E72-548CF649016B}"
#usecom global IContextMenuSite IID_IContextMenuSite "{}"
#comfunc global IContextMenuSite_DoContextMenuPopup  3 sptr,int,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。