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
指定函数选项。
使用以下标志之一指定函数水平定位快捷菜单的方式。
值 | 含义 |
---|---|
|
快捷菜单相对于 x 参数指定的坐标水平居中。 |
|
定位快捷菜单,使其左侧与 x 参数指定的坐标对齐。 |
|
定位快捷菜单,使其右侧与 x 参数指定的坐标对齐。 |
使用以下标志之一指定函数垂直定位快捷菜单的方式。
值 | 含义 |
---|---|
|
定位快捷菜单,使其底部与 y 参数指定的坐标对齐。 |
|
定位快捷菜单,使其顶部与 y 参数指定的坐标对齐。 |
|
相对于 y 参数指定的坐标,将快捷菜单垂直居中。 |
使用以下标志控制用户选择的发现,而无需为菜单设置父窗口。
值 | 含义 |
---|---|
|
当用户单击菜单项时, 函数不会发送通知消息。 |
|
函数在返回值中返回用户所选内容的菜单项标识符。 |
使用以下标志之一指定快捷菜单跟踪的鼠标按钮。
值 | 含义 |
---|---|
|
用户只能使用鼠标左键选择菜单项。 |
|
用户可以使用鼠标左键和右键选择菜单项。 |
使用以下标志的任意合理组合来修改菜单的动画。 例如,通过选择水平和垂直标志,可以实现对角线动画。
若要发生任何动画, SystemParametersInfo 函数必须设置 SPI_SETMENUANIMATION。 此外,如果打开菜单淡化动画,则忽略除TPM_NOANIMATION之外的所有TPM_*ANIMATION 标志。 有关详细信息,请参阅 SystemParametersInfo 中的 SPI_GETMENUFADE 标志。
使用 TPM_RECURSE 标志在已显示另一个菜单时显示菜单。 这旨在支持菜单中的上下文菜单。
使用以下标志之一来指定是适应水平对齐还是垂直对齐。
值 | 含义 |
---|---|
|
如果在不重叠排除的矩形的情况下无法在指定位置显示菜单,则系统会尝试在请求的垂直对齐之前适应请求的水平对齐方式。 |
|
如果在不重叠排除的矩形的情况下无法在指定位置显示菜单,则系统会尝试在请求的水平对齐之前适应请求的垂直对齐方式。 |
排除的矩形是菜单不应重叠的屏幕的一部分;它由 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_LEFTALIGN或TPM_RIGHTALIGN) 和/或水平动画方向标志 (TPM_HORPOSANIMATION或TPM_HORNEGANIMATION) 传递给 TrackPopupMenuEx。 这对于创建最佳用户体验至关重要,尤其是在开发 Microsoft 平板电脑应用程序时。
若要显示通知图标的上下文菜单,在应用程序调用 TrackPopupMenu 或 TrackPopupMenuEx 之前,当前窗口必须是前台窗口。 否则,当用户单击菜单或创建菜单的窗口外部时,菜单不会消失 (如果它) 可见。 如果当前窗口是子窗口,则必须将 (顶级) 父窗口设置为前台窗口。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 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 ( |
请参阅
概念性
引用