TrackPopupMenuEx 函数 (winuser.h)

在指定位置显示快捷菜单,并跟踪快捷菜单上的项选择。 快捷菜单可以出现在屏幕上的任意位置。

语法

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

参数

[in] hMenu

类型: HMENU

要显示的快捷菜单的句柄。 可以通过调用 CreatePopupMenu 函数创建新的快捷菜单或通过调用 GetSubMenu 函数检索与现有菜单项关联的子菜单的句柄来获取此句柄。

[in] uFlags

类型: UINT

指定函数选项。

使用以下标志之一指定函数水平定位快捷菜单的方式。

含义
TPM_CENTERALIGN
0x0004L
快捷菜单相对于 x 参数指定的坐标水平居中。
TPM_LEFTALIGN
0x0000L
定位快捷菜单,使其左侧与 x 参数指定的坐标对齐。
TPM_RIGHTALIGN
0x0008L
定位快捷菜单,使其右侧与 x 参数指定的坐标对齐。
 

使用以下标志之一指定函数垂直定位快捷菜单的方式。

含义
TPM_BOTTOMALIGN
0x0020L
定位快捷菜单,使其底部与 y 参数指定的坐标对齐。
TPM_TOPALIGN
0x0000L
定位快捷菜单,使其顶部与 y 参数指定的坐标对齐。
TPM_VCENTERALIGN
0x0010L
相对于 y 参数指定的坐标,将快捷菜单垂直居中。
 

使用以下标志控制用户选择的发现,而无需为菜单设置父窗口。

含义
TPM_NONOTIFY
0x0080L
当用户单击菜单项时, 函数不会发送通知消息。
TPM_RETURNCMD
0x0100L
函数在返回值中返回用户所选内容的菜单项标识符。
 

使用以下标志之一指定快捷菜单跟踪的鼠标按钮。

含义
TPM_LEFTBUTTON
0x0000L
用户只能使用鼠标左键选择菜单项。
TPM_RIGHTBUTTON
0x0002L
用户可以使用鼠标左键和右键选择菜单项。
 

使用以下标志的任意合理组合来修改菜单的动画。 例如,通过选择水平和垂直标志,可以实现对角线动画。

含义
TPM_HORNEGANIMATION
0x0800L
从右到左对菜单进行动画处理。
TPM_HORPOSANIMATION
0x0400L
从左到右对菜单进行动画处理。
TPM_NOANIMATION
0x4000L
显示不带动画的菜单。
TPM_VERNEGANIMATION
0x2000L
从下到上对菜单进行动画处理。
TPM_VERPOSANIMATION
0x1000L
从上到下对菜单进行动画处理。
 

若要发生任何动画, SystemParametersInfo 函数必须设置 SPI_SETMENUANIMATION。 此外,如果打开菜单淡化动画,则忽略除TPM_NOANIMATION之外的所有TPM_*ANIMATION 标志。 有关详细信息,请参阅 SystemParametersInfo 中的 SPI_GETMENUFADE 标志。

使用 TPM_RECURSE 标志在已显示另一个菜单时显示菜单。 这旨在支持菜单中的上下文菜单。

使用以下标志之一来指定是适应水平对齐还是垂直对齐。

含义
TPM_HORIZONTAL
0x0000L
如果在不重叠排除的矩形的情况下无法在指定位置显示菜单,则系统会尝试在请求的垂直对齐之前适应请求的水平对齐方式。
TPM_VERTICAL
0x0040L
如果在不重叠排除的矩形的情况下无法在指定位置显示菜单,则系统会尝试在请求的水平对齐之前适应请求的垂直对齐方式。
 

排除的矩形是菜单不应重叠的屏幕的一部分;它由 lptpm 参数指定。

对于从右到左的文本布局,请使用 TPM_LAYOUTRTL。 默认情况下,文本布局为从左到右。

[in] x

类型: int

快捷菜单的水平位置(以屏幕坐标表示)。

[in] y

类型: int

快捷菜单的垂直位置,以屏幕坐标表示。

[in] hwnd

类型:HWND

拥有快捷菜单的窗口的句柄。 此窗口接收来自菜单的所有消息。 在函数返回之前,窗口不会从菜单接收 WM_COMMAND 消息。 如果在 fuFlags 参数中指定TPM_NONOTIFY,则函数不会将消息发送到 由 hwnd 标识的窗口。 但是,仍必须在 hwnd 中传递窗口句柄。 它可以是应用程序中的任何窗口句柄。

[in, optional] lptpm

类型: LPTPMPARAMS

指向 TPMPARAMS 结构的指针,该结构指定菜单不应重叠的屏幕区域。 此参数可以为 NULL。

返回值

类型: BOOL

如果在 fuFlags 参数中指定TPM_RETURNCMD,则返回值是用户选择的项的菜单项标识符。 如果用户取消菜单而不进行选择,或者发生错误,则返回值为零。

如果未在 fuFlags 参数中指定TPM_RETURNCMD,则如果函数成功,则返回值为非零值;如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

使用 SM_MENUDROPALIGNMENT 调用 GetSystemMetrics,以确定正确的水平对齐标志 (TPM_LEFTALIGNTPM_RIGHTALIGN) 和/或水平动画方向标志 (TPM_HORPOSANIMATIONTPM_HORNEGANIMATION) 传递给 TrackPopupMenuEx 这对于创建最佳用户体验至关重要,尤其是在开发 Microsoft 平板电脑应用程序时。

若要显示通知图标的上下文菜单,在应用程序调用 TrackPopupMenuTrackPopupMenuEx 之前,当前窗口必须是前台窗口。 否则,当用户单击菜单或创建菜单的窗口外部时,菜单不会消失 (如果它) 可见。 如果当前窗口是子窗口,则必须将 (顶级) 父窗口设置为前台窗口。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll
API 集 在 Windows 8.1) 中引入的 ext-ms-win-ntuser-menu-l1-1-1 (

请参阅

概念性

CreatePopupMenu

GetSubMenu

菜单

引用

TPMPARAMS

WM_COMMAND