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 |