CONTEXTMENUITEM 構造体 (mmc.h)
CONTEXTMENUITEM 構造体は、新しいメニュー項目、サブメニュー、または挿入ポイントを定義するために、IContextMenuCallback::AddItem メソッドまたは IContextMenuProvider::AddItem メソッド (IContextMenuCallback から継承) に渡されます。 コンテキスト メニューはルートダウンから作成され、新しい項目はそれぞれサブメニューの末尾または挿入ポイントに移動します。
構文
typedef struct _CONTEXTMENUITEM {
LPWSTR strName;
LPWSTR strStatusBarText;
LONG lCommandID;
LONG lInsertionPointID;
LONG fFlags;
LONG fSpecialFlags;
} CONTEXTMENUITEM;
メンバー
strName
メニュー項目またはサブメニューの名前を含む null で終わる文字列へのポインター。 このメンバーは、区切り記号または挿入ポイントを除いて NULL にすることはできません。
strStatusBarText
この項目が強調表示されたときにステータス バーに表示されるテキストを含む null で終わる文字列へのポインター。 このメンバーは NULL にすることができます。
lCommandID
メニュー項目のコマンド識別子を示す 値。 このメニュー項目が IExtendContextMenu::AddMenuItems によって追加され、選択されている場合、これは IExtendContextMenu::Command に渡されるコマンド ID です。 このメニュー項目が IContextMenuProvider インターフェイスによって追加され、選択されている場合、これは IContextMenuProvider::ShowContextMenu によって pISelected に返されるコマンド ID です。 これが挿入ポイント (fSpecialFlags で設定CCM_SPECIAL_INSERTION_POINT) またはサブメニュー (fFlagsで設定MF_POPUP) の場合は、後続の呼び出しで lInsertionPointID として lCommandID を使用します (詳細については、次の一覧を参照してください)。 新しい挿入ポイント ID の特定のビットがオンで、他のビットがオフになっている必要があるため、次の説明をよくお読みください。
コマンド ID の一部のビットでは、挿入ポイントまたはサブメニューではない項目に対して特別な処理が必要です。
CCM_COMMANDID_MASK_RESERVED = 0xFFFF0000
これらのビットが設定されている場合、挿入ポイントとサブメニュー以外の項目は追加できません。
挿入ポイント ID の一部のビットでは、挿入ポイント (fSpecialFlags と CCM_SPECIAL_INSERTION_POINT) またはサブメニュー (fFlags と MF_POPUP) の項目に対して特別な処理が必要です。
CCM_INSERTIONPOINTID_MASK_SPECIAL = 0xFFFF0000
特別な動作。 スナップインでは、必要に応じて他のビットを使用できます。
CCM_INSERTIONPOINTID_MASK_SHARED = 0x80000000
これらの挿入ポイントとサブメニューは、コンテキスト メニューの作成者、プライマリ拡張機能、およびサード パーティの拡張機能の間で共有されます。 共有挿入ポイントまたはサブメニューに追加された項目は、コンテキスト メニュー、プライマリ拡張機能、およびサード パーティの拡張機能の作成者が使用できます。
このビットが設定されていない場合は、 IContextMenuProvider インターフェイスと各拡張機能で同じ ID を使用できます。 各 ID は、異なる挿入ポイントまたはサブメニューを参照します。
コンテキスト メニューの作成者とプライマリ スナップインのみが、共有の挿入ポイントまたはサブメニューを作成できます。
CCM_INSERTIONPOINTID_MASK_CREATE_PRIMARY = 0x40000000
このビットは、プライマリ スナップインによって作成された共有の挿入ポイントとサブメニューに対して設定する必要があり、コンテキスト メニュー作成者によって作成されたものには設定されません。 これにより、共有挿入ポイントとサブメニューの 2 つのソース間で ID の競合が回避されます。
CCM_INSERTIONPOINTID_MASK_ADD_PRIMARY = 0x20000000
プライマリ スナップインが共有挿入ポイントまたはサブメニューに項目を追加できるようにします。
CCM_INSERTIONPOINTID_MASK_ADD_3RDPARTY = 0x10000000
拡張スナップインで共有挿入ポイントまたはサブメニューに項目を追加できるようにします。
CCM_INSERTIONPOINTID_MASK_RESERVED = 0x0FFF0000
これらのビットセットを使用して挿入ポイントまたはサブメニューを追加することはできません。
lInsertionPointID
コンテキスト メニューの新しい項目を追加する場所を示す 値。 スナップインは、メニュー作成者またはプライマリ スナップインによって作成された挿入ポイントにのみ項目を追加できます。 スコープ ウィンドウとリスト ビューの結果ウィンドウの項目の既定のコンテキスト メニューで MMC によって作成された挿入ポイントを次に示します。
0 (ゼロ)
lInsertionPointID が 0 の場合、このコンテキスト メニューのルート メニューが参照されます。 ゼロは、 CCM_INSERTIONPOINTID_ROOT_MENUと同じ意味で使用できます。 ルート メニューに項目を直接追加できるのは IContextMenuProvider インターフェイスのみです。 拡張機能は、 IContextMenuProvider または MMC によってのみ、ルート メニューに追加された挿入ポイントとサブメニューに項目を追加できます。
CCM_INSERTIONPOINTID_PRIMARY_TOP = 0xA0000000
プライマリ スナップインでは、この挿入ポイントを使用して、メインコンテキスト メニューの上部に項目を追加できます。
CCM_INSERTIONPOINTID_PRIMARY_NEW = 0xA0000001
プライマリ スナップインでは、この挿入ポイントを使用して、[新しい] サブメニューの上部に項目を追加できます。 [新しい] サブメニューは、スコープ ウィンドウと結果ウィンドウの両方のコンテキスト メニューで使用できます。
CCM_INSERTIONPOINTID_PRIMARY_TASK = 0xA0000002
プライマリ スナップインでは、この挿入ポイントを使用して、[すべてのタスク] サブメニューの上部に項目を追加できます。 [すべてのタスク] サブメニューは、スコープ ウィンドウと結果ウィンドウの両方のコンテキスト メニューで使用できます。
CCM_INSERTIONPOINTID_PRIMARY_VIEW = 0xA0000003
プライマリ スナップインは、この挿入ポイントを使用して、[ 表示 ] ドロップダウン メニューに項目を追加できます。 ユーザーがツール バーの [ 表示 ] メニューをクリックすると、この挿入ポイントは表示されますが、[新規] および [すべてのタスク] の挿入ポイントは表示されません。
CCM_INSERTIONPOINTID_3RDPARTY_NEW = 0x90000001
拡張機能スナップインでは、この挿入ポイントを使用して、[新しい] サブメニューの下部に項目を追加できます。 [新しい] サブメニューは、スコープ ペインのコンテキスト メニューにのみ表示され、結果ウィンドウのコンテキスト メニューには表示されません。
CCM_INSERTIONPOINTID_3RDPARTY_TASK = 0x90000002
拡張機能スナップインでは、この挿入ポイントを使用して、[すべてのタスク] サブメニューの下部に項目を追加できます。
CCM_INSERTIONPOINTID_ROOT_MENU = 0x80000000
IContextMenuProvider インターフェイスでは、この挿入ポイントを使用してルート メニューに項目を追加できます。
プライマリ拡張機能もサードパーティの拡張機能も、 IContextMenuProvider によって追加された挿入ポイントを除き、ルート メニューに項目を追加することはできません。
fFlags
次のスタイル フラグの 1 つ以上を指定する 値。
MF_POPUP
これがコンテキスト メニュー内のサブメニューであることを示す 値。 メニュー項目、挿入ポイント、その他のサブメニューは、 その lCommandID を lInsertionPointID として使用して、このサブメニューに追加できます。
MF_BITMAP
MF_OWNERDRAW
これらのフラグはサポートされていないため、 IContextMenuCallback::AddItem は E_INVALIDARGを返します。
MF_SEPARATOR
水平方向の区切り線を描画します。
IContextMenuProvider インターフェイスのみが、MF_SEPARATOR設定されたメニュー項目を追加できます。
次のフラグは、Windows API で行うのと同じ方法で機能します。
MF_CHECKED
メニュー項目を選択します。
MF_DISABLED
メニュー項目を無効にして選択できないようにしますが、フラグは灰色で表示されません。
MF_ENABLED
メニュー項目を有効にして選択し、灰色の状態から復元します。
MF_GRAYED
メニュー項目を無効にし、選択できないように灰色表示します。
MF_MENUBARBREAK
メニュー バーの MF_MENUBREAK フラグと同じように機能します。 ドロップダウン メニュー、サブメニュー、またはショートカット メニューの場合は、新しい列が古い列と縦線で区切られます。
MF_MENUBREAK
列を区切らずに、新しい行 (メニュー バーの場合) または新しい列 (ドロップダウン メニュー、サブメニュー、またはショートカット メニューの場合) に項目をPlacesします。
MF_UNCHECKED
項目を選択しません (既定値)。
次のフラグ グループを一緒に使用することはできません。
- MF_DISABLED、 MF_ENABLED、 MF_GRAYED
- MF_MENUBARBREAK と MF_MENUBREAK
- MF_CHECKED と MF_UNCHECKED
fSpecialFlags
次のフラグの 1 つ以上を指定する 値。
CCM_SPECIAL_SEPARATOR = 0x0001
lInsertionPointID を除く他のすべてのパラメーターは無視します。 メニューの末尾または指定した挿入ポイントに区切り記号を追加します。 メニューまたはサブメニューの上部または下部に配置された区切り記号は表示されません。 間にメニュー項目がない区切り記号は、1 つの区切り記号に折りたたまれます。
区切り記号を追加できるのは 、IContextMenuProvider インターフェイスのみです。特別な場合は 、それ以外の場合は 。
CCM_SPECIAL_SUBMENU = 0x0002
このサブメニューが空の場合は、灰色で表示され、無効になります。 これは、 MF_POPUP 項目に対してのみ有効です。
CCM_SPECIAL_DEFAULT_ITEM = 0x0004
既定のメニュー項目。 複数のメニュー項目でこのフラグが指定されている場合は、各サブメニューの最後の項目が優先されます。
CCM_SPECIAL_INSERTION_POINT = 0x0008
lCommandID と lInsertionPointID 以外の他のすべてのパラメーターは無視します。 これにより、 lInsertionPointID で識別される挿入ポイントまたはサブメニューの末尾に新しい挿入ポイントが作成されます。
後続の呼び出しでは、この呼び出しの lCommandID パラメーターを lInsertionPointID として使用し、メニューのこの時点で独自のメニュー項目、サブメニュー、または挿入ポイントを挿入できます。
CCM_SPECIAL_TESTONLY = 0x0010
項目パラメーターを検証しますが、メニュー項目を追加しないでください。 add が成功したかどうかを示す結果コードを返します。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista |
サポートされている最小のサーバー | Windows Server 2008 |
Header | mmc.h |