CONTEXTMENUITEM-Struktur (mmc.h)

Die CONTEXTMENUITEM-Struktur wird an die IContextMenuCallback::AddItem-Methode oder die IContextMenuProvider::AddItem-Methode (geerbt von IContextMenuCallback) übergeben, um ein neues Menüelement, Einfügemenü oder eine neue Einfügemarke zu definieren. Das Kontextmenü wird vom Stamm nach unten erstellt, wobei jedes neue Element an das Ende des Untermenüs oder der Einfügemarke wechselt, wo es eingefügt wird.

Syntax

typedef struct _CONTEXTMENUITEM {
  LPWSTR strName;
  LPWSTR strStatusBarText;
  LONG   lCommandID;
  LONG   lInsertionPointID;
  LONG   fFlags;
  LONG   fSpecialFlags;
} CONTEXTMENUITEM;

Member

strName

Ein Zeiger auf eine NULL-Zeichenfolge, die den Namen des Menüelements oder des Untermenüs enthält. Dieses Element kann nicht NULL sein, mit Ausnahme eines Trennzeichens oder einer Einfügemarke.

strStatusBarText

Ein Zeiger auf eine NULL-Zeichenfolge, die den Text enthält, der in der status leiste angezeigt wird, wenn dieses Element hervorgehoben wird. Dieses Element kann NULL sein.

lCommandID

Ein Wert, der den Befehlsbezeichner für Menüelemente angibt. Wenn dieses Menüelement von IExtendContextMenu::AddMenuItems hinzugefügt und dann ausgewählt wird, ist dies die Befehls-ID, die an IExtendContextMenu::Command zurückgegeben wird. Wenn dieses Menüelement von der IContextMenuProvider-Schnittstelle hinzugefügt und dann ausgewählt wird, ist dies die Befehls-ID, die von IContextMenuProvider::ShowContextMenuMenu an pISelected zurückgegeben wird. Wenn dies eine Einfügemarke (CCM_SPECIAL_INSERTION_POINT in fSpecialFlags festgelegt ist) oder ein Untermenü (MF_POPUP in fFlags festgelegt ist), verwenden Sie lCommandID in nachfolgenden Aufrufen als lInsertionPointID (weitere Informationen finden Sie in der folgenden Liste). Lesen Sie die folgende Diskussion sorgfältig durch, da bestimmte Bits in der neuen Einfügemarkes-ID aktiviert sein müssen und andere deaktiviert sein müssen.

Einige Bits in der Befehls-ID erfordern eine spezielle Behandlung für Elemente, die keine Einfügepunkte oder Untermenüs sind.

CCM_COMMANDID_MASK_RESERVED = 0xFFFF0000

Andere Elemente als Einfügepunkte und Untermenüs können nicht hinzugefügt werden, wenn diese Bits festgelegt werden.

Einige Bits in der Einfügemarkes-ID erfordern eine spezielle Behandlung für Elemente, die Einfügepunkte (fSpecialFlags und CCM_SPECIAL_INSERTION_POINT) oder Untermenüs (fFlags und MF_POPUP) sind.

CCM_INSERTIONPOINTID_MASK_SPECIAL = 0xFFFF0000

Besonderes Verhalten. Snap-Ins können die anderen Bits nach Bedarf verwenden.

CCM_INSERTIONPOINTID_MASK_SHARED = 0x80000000

Diese Einfügepunkte und Untermenüs werden vom Ersteller des Kontextmenüs, der primären Erweiterung und der Drittanbietererweiterung gemeinsam genutzt. Elemente, die einer freigegebenen Einfügemarke oder einem Untermenü hinzugefügt werden, stehen dem Ersteller des Kontextmenüs, der primären Erweiterung und der Drittanbietererweiterung zur Verfügung.

Wenn dieses Bit nicht festgelegt ist, können die IContextMenuProvider-Schnittstelle und jede Erweiterung dieselbe ID verwenden. Jede ID verweist auf eine andere Einfügemarke oder ein anderes Untermenü.

Nur der Ersteller des Kontextmenüs und das primäre Snap-In können freigegebene Einfügepunkte oder Untermenüs erstellen.

CCM_INSERTIONPOINTID_MASK_CREATE_PRIMARY = 0x40000000

Dieses Bit muss für freigegebene Einfügepunkte und Untermenüs festgelegt werden, die vom primären Snap-In erstellt wurden, und nicht für diejenigen festgelegt werden, die vom Ersteller des Kontextmenüs erstellt wurden. Dadurch werden ID-Konflikte zwischen den beiden Quellen von freigegebenen Einfügepunkten und Untermenüs verhindert.

CCM_INSERTIONPOINTID_MASK_ADD_PRIMARY = 0x20000000

Erlauben Sie dem primären Snap-In, Elemente zu einer freigegebenen Einfügemarke oder einem Untermenü hinzuzufügen.

CCM_INSERTIONPOINTID_MASK_ADD_3RDPARTY = 0x10000000

Ermöglichen Sie Erweiterungs-Snap-Ins das Hinzufügen von Elementen zu einer freigegebenen Einfügemarke oder einem Untermenü.

CCM_INSERTIONPOINTID_MASK_RESERVED = 0x0FFF0000

Einfügepunkte oder Untermenüs können nicht hinzugefügt werden, wenn eines dieser Bits festgelegt ist.

lInsertionPointID

Ein Wert, der angibt, wo im Kontextmenü das neue Element hinzugefügt werden soll. Snap-Ins können nur Elemente zu Einfügepunkten hinzufügen, die vom Menüersteller oder dem primären Snap-In erstellt wurden. Die folgenden Einfügepunkte werden von MMC in den Standardkontextmenüs für Elemente im Bereichsbereich und im Ergebnisbereich der Listenansicht erstellt:

0 (Null)

Eine lInsertionPointID von 0 bezieht sich auf das Stammmenü für dieses Kontextmenü. Zero kann austauschbar mit CCM_INSERTIONPOINTID_ROOT_MENU verwendet werden. Beachten Sie, dass nur die IContextMenuProvider-Schnittstelle Elemente direkt zum Stammmenü hinzufügen kann. Erweiterungen können nur Elemente zu Einfügepunkten und Untermenüs hinzufügen, die dem Stammmenü von IContextMenuProvider oder MMC hinzugefügt wurden.

CCM_INSERTIONPOINTID_PRIMARY_TOP = 0xA0000000

Das primäre Snap-In kann diese Einfügemarke verwenden, um elemente am oberen Rand des Standard Kontextmenüs hinzuzufügen.

CCM_INSERTIONPOINTID_PRIMARY_NEW = 0xA0000001

Das primäre Snap-In kann diese Einfügemarke verwenden, um oben im Untermenü "Neu" Elemente hinzuzufügen. Das Untermenü Neu ist sowohl im Bereichsbereich als auch im Ergebnisbereich in Kontextmenüs verfügbar.

CCM_INSERTIONPOINTID_PRIMARY_TASK = 0xA0000002

Das primäre Snap-In kann diese Einfügemarke verwenden, um oben im Untermenü "Alle Aufgaben" Elemente hinzuzufügen. Das Untermenü Alle Aufgaben ist sowohl im Bereichsbereich als auch im Ergebnisbereich in Kontextmenüs verfügbar.

CCM_INSERTIONPOINTID_PRIMARY_VIEW = 0xA0000003

Das primäre Snap-In kann diese Einfügemarke verwenden, um dem Dropdownmenü Ansicht Elemente hinzuzufügen. Wenn der Benutzer auf der Symbolleiste auf das Menü Ansicht klickt, ist diese Einfügemarke vorhanden, aber die Einfügepunkte Neu und Alle Aufgaben werden nicht angezeigt.

CCM_INSERTIONPOINTID_3RDPARTY_NEW = 0x90000001

Erweiterungs-Snap-Ins können diese Einfügemarke verwenden, um elemente am unteren Rand des Untermenüs Neu hinzuzufügen. Das Untermenü Neu ist nur für Kontextmenüs im Bereichsbereich und nicht für Kontextmenüs im Ergebnisbereich vorhanden.

CCM_INSERTIONPOINTID_3RDPARTY_TASK = 0x90000002

Erweiterungs-Snap-Ins können diese Einfügemarke verwenden, um elemente am unteren Rand des Untermenüs "Alle Aufgaben" hinzuzufügen.

CCM_INSERTIONPOINTID_ROOT_MENU = 0x80000000

Die IContextMenuProvider-Schnittstelle kann diese Einfügemarke verwenden, um dem Stammmenü Elemente hinzuzufügen.

Weder primäre Erweiterungen noch Erweiterungen von Drittanbietern können Elemente zum Stammmenü hinzufügen, außer über Einfügepunkte, die von IContextMenuProvider hinzugefügt wurden.

fFlags

Ein Wert, der mindestens eins der folgenden Formatflags angibt:

MF_POPUP

Ein Wert, der angibt, dass es sich um ein Untermenü im Kontextmenü handelt. Menüelemente, Einfügepunkte und weitere Untermenüs können diesem Untermenü mithilfe der lCommandID als lInsertionPointID hinzugefügt werden.

MF_BITMAP

MF_OWNERDRAW

Diese Flags werden nicht unterstützt und führen dazu, dass IContextMenuCallback::AddItemE_INVALIDARG zurückgibt.

MF_SEPARATOR

Zeichnet eine horizontale Trennlinie.

Nur die IContextMenuProvider-Schnittstelle kann Menüelemente hinzufügen, die MF_SEPARATOR festgelegt sind.

Die folgenden Flags funktionieren auf die gleiche Weise wie in der Windows-API:

MF_CHECKED

Wählt das Menüelement aus.

MF_DISABLED

Deaktiviert das Menüelement, sodass es nicht ausgewählt werden kann, aber das Flag nicht graut.

MF_ENABLED

Aktiviert das Menüelement, sodass es ausgewählt werden kann, und wiederherstellen es aus einem abgeblendeten Zustand.

MF_GRAYED

Deaktiviert das Menüelement, sodass es nicht ausgewählt werden kann.

MF_MENUBARBREAK

Funktioniert genauso wie das MF_MENUBREAK-Flag für eine Menüleiste. Bei einem Dropdownmenü, Untermenü oder Kontextmenü wird die neue Spalte durch eine vertikale Linie von der alten Spalte getrennt.

MF_MENUBREAK

Places das Element in einer neuen Zeile (für eine Menüleiste) oder in einer neuen Spalte (für ein Dropdownmenü, Untermenü oder Kontextmenü), ohne Spalten zu trennen.

MF_UNCHECKED

Wählt das Element nicht aus (Standard).

Die folgenden Flaggruppen können nicht zusammen verwendet werden:

  • MF_DISABLED, MF_ENABLED und MF_GRAYED
  • MF_MENUBARBREAK und MF_MENUBREAK
  • MF_CHECKED und MF_UNCHECKED

fSpecialFlags

Ein Wert, der mindestens eins der folgenden Flags angibt:

CCM_SPECIAL_SEPARATOR = 0x0001

Ignorieren Sie alle anderen Parameter außer lInsertionPointID. Fügen Sie am Ende des Menüs oder an der angegebenen Einfügemarke ein Trennzeichen hinzu. Trennzeichen am oberen oder unteren Rand eines Menüs oder Untermenüs werden nicht angezeigt. Trennzeichen ohne Menüelemente dazwischen werden in ein einzelnes Trennzeichen reduziert.

Nur die IContextMenuProvider-Schnittstelle kann Trennzeichen hinzufügen, speziell oder anders.

CCM_SPECIAL_SUBMENU = 0x0002

Wenn dieses Untermenü leer ist, wird es abgeblendet und deaktiviert. Dies gilt nur für MF_POPUP Elemente.

CCM_SPECIAL_DEFAULT_ITEM = 0x0004

Das Standardmenüelement. Wenn mehr als ein Menüelement dieses Flag angibt, hat das letzte Element in jedem Untermenü Vorrang.

CCM_SPECIAL_INSERTION_POINT = 0x0008

Ignorieren Sie alle anderen Parameter außer lCommandID und lInsertionPointID. Dadurch wird eine neue Einfügemarke am Ende der Einfügemarke oder des Untermenüs erstellt, das durch lInsertionPointID identifiziert wird.

Nachfolgende Aufrufe können den lCommandID-Parameter aus diesem Aufruf als lInsertionPointID verwenden und an dieser Stelle im Menü eigene Menüelemente, Untermenüs oder Einfügepunkte einfügen.

CCM_SPECIAL_TESTONLY = 0x0010

Überprüfen Sie die Elementparameter, aber fügen Sie das Menüelement nicht hinzu. Gibt Ergebniscode zurück, der angibt, ob das Hinzufügen erfolgreich gewesen wäre.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Unterstützte Mindestversion (Server) Windows Server 2008
Kopfzeile mmc.h

Weitere Informationen

IContextMenuCallback

IContextMenuProvider

IExtendContextMenu

Arbeiten mit Kontextmenüs