IContextMenu::QueryContextMenu-Methode (shobjidl_core.h)
Fügt Befehle zu einem Kontextmenü hinzu.
Syntax
HRESULT QueryContextMenu(
HMENU hmenu,
UINT indexMenu,
UINT idCmdFirst,
UINT idCmdLast,
UINT uFlags
);
Parameter
hmenu
Typ: HMENU
Ein Handle zum Kontextmenü. Der Handler sollte dieses Handle beim Hinzufügen von Menüelementen angeben.
indexMenu
Typ: UINT
Die nullbasierte Position, an der das erste neue Menüelement eingefügt werden soll.
idCmdFirst
Typ: UINT
Der Mindestwert, den der Handler für einen Menüelementbezeichner angeben kann.
idCmdLast
Typ: UINT
Der Maximalwert, den der Handler für einen Menüelementbezeichner angeben kann.
uFlags
Typ: UINT
Optionale Flags, die angeben, wie das Kontextmenü geändert werden kann. Dieser Parameter kann auf eine Kombination der folgenden Werte festgelegt werden. Die restlichen Bits des Worts mit niedriger Reihenfolge werden vom System reserviert. Das hochgeordnete Wort kann für kontextspezifische Kommunikation verwendet werden. Der CMF_RESERVED Wert kann verwendet werden, um das Wort mit niedriger Reihenfolge zu maskieren.
CMF_NORMAL (0x00000000)
0x00000000. Gibt den normalen Vorgang an. Eine Kontextmenüerweiterung, Namespaceerweiterung oder Drag-and-Drop-Handler können alle Menüelemente hinzufügen.
CMF_DEFAULTONLY (0x00000001)
0x00000001. Der Benutzer aktiviert die Standardaktion, in der Regel durch Doppelklicken. Dieses Flag bietet einen Hinweis für die Kontextmenüerweiterung, nichts hinzuzufügen, wenn das Standardelement im Menü nicht geändert wird. Eine Kontextmenüerweiterung oder ein Drag-and-Drop-Handler sollte keine Menüelemente hinzufügen, wenn dieser Wert angegeben ist. Eine Namespaceerweiterung sollte höchstens das Standardelement hinzufügen.
CMF_VERBSONLY (0x00000002)
0x00000002. Das Kontextmenü ist das einer Verknüpfungsdatei (normalerweise eine .lnk Datei). Kontextmenühandler sollten diesen Wert ignorieren.
CMF_EXPLORE (0x00000004)
0x00000004. Das Windows Explorer-Strukturfenster ist vorhanden.
CMF_NOVERBS (0x00000008)
0x00000008. Dieses Flag ist für Elemente festgelegt, die im Menü "Senden an" angezeigt werden. Kontextmenühandler sollten diesen Wert ignorieren.
CMF_CANRENAME (0x00000010)
0x00000010. Die aufrufende Anwendung unterstützt das Umbenennen von Elementen. Ein Kontextmenü oder ein Drag-and-Drop-Handler sollte dieses Flag ignorieren. Eine Namespaceerweiterung sollte dem Menü ggf. ein Umbenennen-Element hinzufügen.
CMF_NODEFAULT (0x00000020)
0x00000020. Kein Element im Menü wurde als Standard festgelegt. Ein Drag-and-Drop-Handler sollte dieses Flag ignorieren. Eine Namespaceerweiterung sollte keines der Menüelemente als Standard festlegen.
CMF_INCLUDESTATIC (0x00000040)
Dieser Wert ist nicht verfügbar.
Windows Server 2003 und Windows XP: 0x00000040. Ein statisches Menü wird erstellt. Nur der Browser sollte dieses Flag verwenden. Alle anderen Kontextmenüerweiterungen sollten sie ignorieren.
CMF_ITEMMENU (0x00000080)
0x00000080. Die aufrufende Anwendung ruft ein Kontextmenü für ein Element in der Ansicht auf (im Gegensatz zum Hintergrund der Ansicht).
Windows Server 2003 und Windows XP: Dieser Wert ist nicht verfügbar.
CMF_EXTENDEDVERBS (0x00000100)
0x00000100. Die aufrufende Anwendung möchte erweiterte Verben. Normale Verben werden angezeigt, wenn der Benutzer mit der rechten Maustaste auf ein Objekt klickt. Um erweiterte Verben anzuzeigen, muss der Benutzer mit der rechten Maustaste klicken, während er die UMSCHALTTASTE drückt.
CMF_DISABLEDVERBS (0x00000200)
0x00000200. Die aufrufende Anwendung möchte deaktivierte Verben aufrufen, z. B. Legacymenüs.
Windows Server 2003 und Windows XP: Dieser Wert ist nicht verfügbar.
CMF_ASYNCVERBSTATE (0x00000400)
0x00000400. Der Verbzustand kann asynchron ausgewertet werden.
Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Dieser Wert ist nicht verfügbar.
CMF_OPTIMIZEFORINVOKE (0x00000800)
0x00000800. Informiert Kontextmenühandler, die den Aufruf eines Verbs nicht unterstützen, über einen kanonischen Verbnamen, um IContextMenu::QueryContextMenu in ihrer Implementierung zu umgehen.
Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Dieser Wert ist nicht verfügbar.
CMF_SYNCCASCADEMENU (0x00001000)
0x00001000. Untermenüs synchron auffüllen.
Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Dieser Wert ist nicht verfügbar.
CMF_DONOTPICKDEFAULT (0x00002000)
0x00002000. Wenn kein Verb explizit angegeben ist, verwenden Sie kein Standardverb an seiner Stelle.
Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP: Dieser Wert ist nicht verfügbar.
CMF_RESERVED (0xffff0000)
0xffff0000. Dieses Flag ist eine Bitmaske, die alle Bits angibt, die nicht verwendet werden sollen. Diese darf nur als Maske verwendet werden. Übergeben Sie dies nicht als Parameterwert.
Rückgabewert
Typ: HRESULT
Bei erfolgreicher Ausführung wird ein HRESULT-Wert zurückgegeben, dessen Schweregrad auf SEVERITY_SUCCESS festgelegt ist und dessen Codewert auf den Offset des größten zugewiesenen Befehlsbezeichners plus eins festgelegt ist. Wenn idCmdFirst beispielsweise auf 5 festgelegt ist und Sie dem Menü drei Elemente mit Befehlsbezeichnern von 5, 7 und 8 hinzufügen, sollte der Rückgabewert MAKE_HRESULT(SEVERITY_SUCCESS, 0, 8 - 5 + 1) lauten. Andernfalls wird ein COM-Fehlerwert zurückgegeben.
Hinweise
Diese Methode sollte entweder InsertMenu oder InsertMenuItem aufrufen, um ihre Menüelemente in das von hmenu angegebene Menü einzufügen. Der indexMenu-Parameter enthält den Index, der für das erste Menüelement verwendet werden soll. Der Bezeichner jedes Menüelements muss innerhalb des durch idCmdFirst und idCmdLast definierten Bereichs liegen.
Eine gängige Vorgehensweise besteht darin, den ersten Befehlsbezeichner auf idCmdFirst (ein Offset von 0) festzulegen und den Offset für jeden zusätzlichen Befehl um 1 zu erhöhen. Diese Vorgehensweise stellt sicher, dass Sie idCmdLast nicht überschreiten, und behält den Bereich der Bezeichner bei, die für die Verwendung durch andere Handler verfügbar sind. Speichern Sie die Offsets zu Referenzzwecken, da sie verwendet werden können, um den Befehl in nachfolgenden Aufrufen von IContextMenu::GetCommandString und IContextMenu::InvokeCommand zu identifizieren.
Wenn die Shell anschließend einen weiteren Kontextmenühandler aufruft, verwendet sie den Codewert des zurückgegebenen HRESULT , um idCmdFirst festzulegen, wenn sie die QueryContextMenu-Methode dieses Handlers aufruft.
Wenn ein Kontextmenühandler ein Popupmenüelement hinzufügt, muss er IContextMenu::QueryContextMenu verwenden, um diesem Menü mindestens ein Element hinzuzufügen, damit die WM_INITMENUPOPUP Nachricht weitergeleitet wird.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | shobjidl_core.h (shobjidl.h einschließen) |
DLL | Shell32.dll (Version 4.0 oder höher) |