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 パラメーターは、最初のメニュー項目に使用されるインデックスを保持します。 各メニュー項目の識別子は、 idCmdFirst と idCmdLast によって定義された範囲内にある必要があります。
一般的な方法は、最初のコマンド識別子を 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 以降) |