IContextMenu::QueryContextMenu メソッド (shobjidl_core.h)

ショートカット メニューにコマンドを追加します。

構文

HRESULT QueryContextMenu(
  HMENU hmenu,
  UINT  indexMenu,
  UINT  idCmdFirst,
  UINT  idCmdLast,
  UINT  uFlags
);

パラメーター

hmenu

種類: HMENU

ショートカット メニューへのハンドル。 ハンドラーは、メニュー項目を追加するときにこのハンドルを指定する必要があります。

indexMenu

型: UINT

最初の新しいメニュー項目を挿入する 0 から始まる位置。

idCmdFirst

型: UINT

メニュー項目識別子にハンドラーが指定できる最小値。

idCmdLast

型: UINT

メニュー項目識別子にハンドラーが指定できる最大値。

uFlags

型: UINT

ショートカット メニューの変更方法を指定する省略可能なフラグ。 このパラメーターは、次の値の組み合わせに設定できます。 下位ワードの残りのビットは、システムによって予約されます。 高次ワードは、コンテキスト固有の通信に使用できます。 CMF_RESERVED値を使用して、下位ワードをマスクできます。

CMF_NORMAL (0x00000000)

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

CMF_DEFAULTONLY (0x00000001)

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

CMF_VERBSONLY (0x00000002)

0x00000002。 ショートカット メニューは、ショートカット ファイル (通常は.lnk ファイル) のショートカット メニューです。 ショートカット メニュー ハンドラーは、この値を無視する必要があります。

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)

0x00002000。 動詞が明示的に指定されていない場合は、その代わりに既定の動詞を使用しないでください。

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

CMF_RESERVED (0xffff0000)

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

戻り値

種類: HRESULT

成功した場合は、重大度値がSEVERITY_SUCCESSに設定され、そのコード値が割り当てられた最大のコマンド識別子のオフセットに 1 を加えた HRESULT 値を返します。 たとえば、 idCmdFirst が 5 に設定されていて、コマンド識別子が 5、7、8 の 3 つの項目をメニューに追加する場合、戻り値は MAKE_HRESULT (SEVERITY_SUCCESS、0、8 - 5 + 1) になります。 それ以外の場合は、COM エラー値を返します。

注釈

このメソッドは、 InsertMenu または InsertMenuItem を呼び出して、そのメニュー項目を hmenu で指定されたメニューに挿入する必要があります。 indexMenu パラメーターは、最初のメニュー項目に使用されるインデックスを保持します。 各メニュー項目の識別子は、 idCmdFirstidCmdLast によって定義された範囲内にある必要があります。

一般的な方法は、最初のコマンド識別子を idCmdFirst (ゼロのオフセット) に設定し、追加の各コマンドのオフセットを 1 ずつインクリメントすることです。 この方法では、 idCmdLast を超えないようにし、他のハンドラーで使用できる識別子の範囲を保持します。 オフセットを参照用に格納します。これは、後続の IContextMenu::GetCommandString および IContextMenu::InvokeCommand の呼び出しでコマンドを識別するために使用できるためです。

シェルは、その後別のショートカット メニュー ハンドラーを呼び出す場合、返された HRESULT のコード値を使用して、そのハンドラーの QueryContextMenu メソッドを呼び出すときに idCmdFirst を設定します。

コンテキスト メニュー ハンドラーがポップアップ メニュー項目を追加する場合、 IContextMenu::QueryContextMenu を使用して、WM_INITMENUPOPUP メッセージを転送するために少なくとも 1 つの項目をそのメニューに追加する必要があります。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー shobjidl_core.h (Shobjidl.h を含む)
[DLL] Shell32.dll (バージョン 4.0 以降)