calculatePopupWindowPosition 函数 (winuser.h)

使用指定的定位点、弹出窗口大小、标志和可选的排除矩形计算适当的弹出窗口位置。 当指定的弹出窗口大小小于桌面窗口大小时,使用 CalculatePopupWindowPosition 函数可确保弹出窗口在桌面窗口中完全可见,而不考虑指定的定位点。

语法

BOOL CalculatePopupWindowPosition(
  [in]           const POINT *anchorPoint,
  [in]           const SIZE  *windowSize,
  [in]           UINT        flags,
  [in, optional] RECT        *excludeRect,
  [out]          RECT        *popupWindowPosition
);

参数

[in] anchorPoint

类型: const POINT*

指定的定位点。

[in] windowSize

类型: const SIZE*

指定的窗口大小。

[in] flags

类型: UINT

使用以下标志之一指定函数如何水平和垂直放置弹出窗口。 标志与 TrackPopupMenuEx 函数的垂直定位标志和水平定位标志相同。

使用以下标志之一指定函数如何水平定位弹出窗口。

含义
TPM_CENTERALIGN
0x0004L
相对于 anchorPoint-x> 参数指定的坐标水平居中弹出窗口。
TPM_LEFTALIGN
0x0000L
定位弹出窗口,使其左边缘与 anchorPoint-x> 参数指定的坐标对齐。
TPM_RIGHTALIGN
0x0008L
定位弹出窗口,使其右边缘与 anchorPoint-x> 参数指定的坐标对齐。
 

使用以下标志之一指定函数垂直定位弹出窗口的方式。

含义
TPM_BOTTOMALIGN
0x0020L
定位弹出窗口,使其下边缘与 anchorPoint-y> 参数指定的坐标对齐。
TPM_TOPALIGN
0x0000L
定位弹出窗口,使其上边缘与 anchorPoint-y> 参数指定的坐标对齐。
TPM_VCENTERALIGN
0x0010L
相对于 anchorPoint-y> 参数指定的坐标,将弹出窗口垂直居中。
 

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

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

以下标志从 Windows 7 开始可用。

含义
TPM_WORKAREA
0x10000L
将弹出窗口限制在工作区内。 如果未设置此标志,则仅当输入点在工作区内时,弹出窗口将限制为工作区。 有关详细信息,请参阅 MONITORINFO 结构的 rcWorkrcMonitor 成员。

[in, optional] excludeRect

类型: RECT*

指向结构的指针,该结构指定排除矩形。 它可以是 NULL

[out] popupWindowPosition

类型: RECT*

指向结构的指针,该结构指定弹出窗口位置。

返回值

类型: BOOL

如果函数成功,则返回 TRUE;否则,它将返回 FALSE。 要获得更多的错误信息,请调用 GetLastError。

注解

TrackPopupMenuTrackPopupMenuEx 函数支持TPM_WORKAREA

要求

   
最低受支持的客户端 Windows 7 [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll

另请参阅

引用

TrackPopupMenu

TrackPopupMenuEx