TrackPopupMenu-Funktion (winuser.h)
Zeigt ein Kontextmenü an der angegebenen Position an und verfolgt die Auswahl der Elemente im Menü nach. Das Kontextmenü kann an einer beliebigen Stelle auf dem Bildschirm angezeigt werden.
Syntax
BOOL TrackPopupMenu(
[in] HMENU hMenu,
[in] UINT uFlags,
[in] int x,
[in] int y,
[in] int nReserved,
[in] HWND hWnd,
[in, optional] const RECT *prcRect
);
Parameter
[in] hMenu
Typ: HMENU
Ein Handle zum anzuzeigenden Kontextmenü. Das Handle kann abgerufen werden, indem Sie CreatePopupMenu aufrufen, um ein neues Kontextmenü zu erstellen, oder durch Aufrufen von GetSubMenu , um ein Handle zu einem Untermenü abzurufen, das einem vorhandenen Menüelement zugeordnet ist.
[in] uFlags
Typ: UINT
Verwenden Sie null dieser Flags, um Funktionsoptionen anzugeben.
Verwenden Sie eines der folgenden Flags, um anzugeben, wie die Funktion das Kontextmenü horizontal positioniert.
Verwenden Sie eines der folgenden Flags, um anzugeben, wie die Funktion das Kontextmenü vertikal positioniert.
Verwenden Sie die folgenden Flags, um die Ermittlung der Benutzerauswahl zu steuern, ohne ein übergeordnetes Fenster für das Menü einrichten zu müssen.
Verwenden Sie eines der folgenden Flags, um anzugeben, welche Maustaste im Kontextmenü nachverfolgt wird.
Verwenden Sie eine vernünftige Kombination der folgenden Flags, um die Animation eines Menüs zu ändern. Wenn Sie beispielsweise ein horizontales und ein vertikales Flag auswählen, können Sie eine diagonale Animation erzielen.
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üblendanimation aktiviert ist. Weitere Informationen finden Sie unter 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 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] nReserved
Typ: int
Reserviert; muss null sein.
[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 keine WM_COMMAND Nachricht aus dem Menü, bis die Funktion zurückgegeben wird. Wenn Sie im uFlags-Parameter TPM_NONOTIFY angeben, sendet die Funktion keine Nachrichten an das von hWnd identifizierte Fenster. Sie müssen jedoch weiterhin ein Fensterhandle in hWnd übergeben. Es kann sich um ein beliebiges Fensterhandle aus Ihrer Anwendung sein.
[in, optional] prcRect
Typ: const RECT*
Ignoriert.
Rückgabewert
Typ: BOOL
Wenn Sie im uFlags-ParameterTPM_RETURNCMD 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 uFlags-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.
Verwenden Sie die Funktion TrackPopupMenuEx , um einen Bereich des Bildschirms anzugeben, der sich nicht überlappen soll.
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.
Wenn das aktuelle Fenster jedoch das Vordergrundfenster ist, wird dieses Menü beim zweiten Mal angezeigt und dann sofort ausgeblendet. Um dies zu beheben, müssen Sie einen Taskwechsel zu der Anwendung erzwingen, die TrackPopupMenu aufgerufen hat. Dies erfolgt, indem eine unschädliche Nachricht an das Fenster oder den Thread gesendet wird, wie im folgenden Codebeispiel gezeigt:
SetForegroundWindow(hDlg);
// Display the menu
TrackPopupMenu( hSubMenu,
TPM_RIGHTBUTTON,
pt.x,
pt.y,
0,
hDlg,
NULL);
PostMessage(hDlg, WM_NULL, 0, 0);
Beispiele
Ein Beispiel finden Sie unter Anzeigen eines Kontextmenüs.
Anforderungen
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-0 (eingeführt in Windows 8) |
Siehe auch
Konzept
Referenz