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)