TrackPopupMenuEx-Funktion (winuser.h)

Zeigt ein Kontextmenü an der angegebenen Position an und verfolgt die Auswahl der Elemente im Kontextmenü nach. Das Kontextmenü kann an einer beliebigen Stelle auf dem Bildschirm angezeigt werden.

Syntax

BOOL TrackPopupMenuEx(
  [in]           HMENU       hMenu,
  [in]           UINT        uFlags,
  [in]           int         x,
  [in]           int         y,
  [in]           HWND        hwnd,
  [in, optional] LPTPMPARAMS lptpm
);

Parameter

[in] hMenu

Typ: HMENU

Ein Handle für das anzuzeigende Kontextmenü. Dieses Handle kann abgerufen werden, indem Sie die CreatePopupMenu-Funktion aufrufen, um ein neues Kontextmenü zu erstellen, oder durch Aufrufen der GetSubMenu-Funktion , um ein Handle für ein Untermenü abzurufen, das einem vorhandenen Menüelement zugeordnet ist.

[in] uFlags

Typ: UINT

Gibt Funktionsoptionen an.

Verwenden Sie eines der folgenden Flags, um anzugeben, wie die Funktion das Kontextmenü horizontal positioniert.

Wert Bedeutung
TPM_CENTERALIGN
0x0004L
Zentriert das Kontextmenü horizontal relativ zur durch den x-Parameter angegebenen Koordinate.
TPM_LEFTALIGN
0x0000L
Positioniert das Kontextmenü so, dass seine linke Seite an der vom x-Parameter angegebenen Koordinate ausgerichtet wird.
TPM_RIGHTALIGN
0x0008L
Positioniert das Kontextmenü so, dass die rechte Seite an der vom x-Parameter angegebenen Koordinate ausgerichtet ist.
 

Verwenden Sie eines der folgenden Flags, um anzugeben, wie die Funktion das Kontextmenü vertikal positioniert.

Wert Bedeutung
TPM_BOTTOMALIGN
0x0020L
Positioniert das Kontextmenü so, dass seine untere Seite an der durch den y-Parameter angegebenen Koordinate ausgerichtet wird.
TPM_TOPALIGN
0x0000L
Positioniert das Kontextmenü so, dass die obere Seite an der vom y-Parameter angegebenen Koordinate ausgerichtet wird.
TPM_VCENTERALIGN
0x0010L
Zentriert das Kontextmenü vertikal relativ zur durch den y-Parameter angegebenen Koordinate.
 

Verwenden Sie die folgenden Flags, um die Ermittlung der Benutzerauswahl zu steuern, ohne ein übergeordnetes Fenster für das Menü einrichten zu müssen.

Wert Bedeutung
TPM_NONOTIFY
0x0080L
Die Funktion sendet keine Benachrichtigungen, wenn der Benutzer auf ein Menüelement klickt.
TPM_RETURNCMD
0x0100L
Die Funktion gibt den Menüelementbezeichner der Auswahl des Benutzers im Rückgabewert zurück.
 

Verwenden Sie eines der folgenden Flags, um anzugeben, welche Maustaste im Kontextmenü nachverfolgt wird.

Wert Bedeutung
TPM_LEFTBUTTON
0x0000L
Der Benutzer kann Menüelemente nur mit der linken Maustaste auswählen.
TPM_RIGHTBUTTON
0x0002L
Der Benutzer kann Menüelemente sowohl mit der linken als auch mit der rechten Maustaste auswählen.
 

Verwenden Sie eine vernünftige Kombination der folgenden Flags, um die Animation eines Menüs zu ändern. Wenn Sie z. B. ein horizontales und ein vertikales Flag auswählen, können Sie eine diagonale Animation erzielen.

Wert Bedeutung
TPM_HORNEGANIMATION
0x0800L
Animiert das Menü von rechts nach links.
TPM_HORPOSANIMATION
0x0400L
Animiert das Menü von links nach rechts.
TPM_NOANIMATION
0x4000L
Zeigt das Menü ohne Animation an.
TPM_VERNEGANIMATION
0x2000L
Animiert das Menü von unten nach oben.
TPM_VERPOSANIMATION
0x1000L
Animiert das Menü von oben nach unten.
 

Damit animationen ausgeführt werden können, muss die SystemParametersInfo-FunktionSPI_SETMENUANIMATION festlegen. Außerdem werden alle TPM_*ANIMATION-Flags außer TPM_NOANIMATION ignoriert, wenn die Menüblendungsanimation aktiviert ist. Weitere Informationen finden Sie im SPI_GETMENUFADE-Flag in SystemParametersInfo.

Verwenden Sie das Flag TPM_RECURSE , um ein Menü anzuzeigen, wenn bereits ein anderes Menü angezeigt wird. Dies soll Kontextmenüs innerhalb eines Menüs unterstützen.

Verwenden Sie eines der folgenden Flags, um anzugeben, ob horizontale oder vertikale Ausrichtung berücksichtigt werden soll.

Wert Bedeutung
TPM_HORIZONTAL
0x0000L
Wenn das Menü nicht an der angegebenen Position ohne Überlappung des ausgeschlossenen Rechtecks angezeigt werden kann, versucht das System, die angeforderte horizontale Ausrichtung vor der angeforderten vertikalen Ausrichtung zu berücksichtigen.
TPM_VERTICAL
0x0040L
Wenn das Menü nicht an der angegebenen Position ohne Überlappung des ausgeschlossenen Rechtecks angezeigt werden kann, versucht das System, die angeforderte vertikale Ausrichtung vor der angeforderten horizontalen Ausrichtung zu berücksichtigen.
 

Das ausgeschlossene Rechteck ist ein Teil des Bildschirms, den das Menü nicht überlappen sollte. sie wird durch den lptpm-Parameter angegeben.

Verwenden Sie für das Textlayout von rechts nach links TPM_LAYOUTRTL. Standardmäßig ist das Textlayout von links nach rechts.

[in] x

Typ: int

Die horizontale Position des Kontextmenüs in Bildschirmkoordinaten.

[in] y

Typ: int

Die vertikale Position des Kontextmenüs in Bildschirmkoordinaten.

[in] hwnd

Typ: HWND

Ein Handle für das Fenster, das das Kontextmenü besitzt. Dieses Fenster empfängt alle Nachrichten aus dem Menü. Das Fenster empfängt erst dann eine WM_COMMAND Nachricht aus dem Menü, wenn die Funktion zurückgegeben wird. Wenn Sie im fuFlags-Parameter TPM_NONOTIFY angeben, sendet die Funktion keine Nachrichten an das durch hwnd identifizierte Fenster. Sie müssen jedoch weiterhin ein Fensterhandle in hwnd übergeben. Dies kann ein beliebiges Fensterhandle aus Ihrer Anwendung sein.

[in, optional] lptpm

Typ: LPTPMPARAMS

Ein Zeiger auf eine TPMPARAMS-Struktur , die einen Bereich des Bildschirms angibt, den das Menü nicht überlappen sollte. Dieser Parameter kann NULL sein.

Rückgabewert

Typ: BOOL

Wenn Sie TPM_RETURNCMD im fuFlags-Parameter angeben, ist der Rückgabewert der Menüelementbezeichner des elements, das der Benutzer ausgewählt hat. Wenn der Benutzer das Menü abbricht, ohne eine Auswahl vorzunehmen, oder wenn ein Fehler auftritt, ist der Rückgabewert null.

Wenn Sie TPM_RETURNCMD im fuFlags-Parameter nicht angeben, ist der Rückgabewert ungleich null, wenn die Funktion erfolgreich ist, und null, wenn sie fehlschlägt. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Rufen Sie GetSystemMetrics mit SM_MENUDROPALIGNMENT auf, um das richtige horizontale Ausrichtungsflag (TPM_LEFTALIGN oder TPM_RIGHTALIGN) und/oder das horizontale Animationsrichtungsflag (TPM_HORPOSANIMATION oder TPM_HORNEGANIMATION) zu bestimmen, das an TrackPopupMenu oder TrackPopupMenuEx übergeben werden soll. Dies ist wichtig, um eine optimale Benutzererfahrung zu schaffen, insbesondere bei der Entwicklung von Microsoft Tablet PC-Anwendungen.

Um ein Kontextmenü für ein Benachrichtigungssymbol anzuzeigen, muss das aktuelle Fenster das Vordergrundfenster sein, bevor die Anwendung TrackPopupMenu oder TrackPopupMenuEx aufruft. Andernfalls wird das Menü nicht ausgeblendet, wenn der Benutzer außerhalb des Menüs oder des Fensters klickt, in dem das Menü erstellt wurde (sofern es sichtbar ist). Wenn das aktuelle Fenster ein untergeordnetes Fenster ist, müssen Sie das übergeordnete Fenster (oberste Ebene) als Vordergrundfenster festlegen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winuser.h (windows.h einschließen)
Bibliothek User32.lib
DLL User32.dll
APIs ext-ms-win-ntuser-menu-l1-1-1 (eingeführt in Windows 8.1)

Siehe auch

Konzept

CreatePopupMenu

GetSubMenu

Menüs

Referenz

TPMPARAMS

WM_COMMAND