(指定定位点,弹出窗口的大小,标志以及可选排除矩形)计算弹出窗体的适当位置.
#Include <WinAPIEx.au3>
_WinAPI_CalculatePopupWindowPosition ( $iX, $iY, $iWidth, $iHeight [, $iFlags [, $tExclude]] )
$iX | 定位点 x 坐标逻辑单位值. |
$iY | 定位点 y 坐标逻辑单位值. |
$iWidth | 窗口宽度逻辑单位值. |
$iHeight | 窗口高度逻辑单位值. |
$iFlags | [可选参数] 函数如何定位弹出窗口的(水平及垂直)位置. $TPM_CENTERALIGN --- 弹出窗口的中心与参数 $iX 的坐标点水平对齐. $TPM_LEFTALIGN ------ 弹出窗口的左边与参数 $iX 的坐标点对齐. $TPM_RIGHTALIGN ----- 弹出窗口的右边与参数 $iX 的坐标点对齐. $TPM_BOTTOMALIGN ---- 弹出窗口的底边与参数 $iY 的坐标点对齐. $TPM_TOPALIGN -------- 弹出窗口的左边与参数 $iY 的坐标点对齐. $TPM_VCENTERALIGN --- 弹出窗口的中心与参数 $iY 的坐标点垂直对齐. $TPM_HORIZONTAL --- 如果弹出式窗口不能显示在指定的位置,在请求的垂直对齐前,系统按要求的水平对齐调整. $TPM_VERTICAL ------ 如果弹出式窗口不能显示在指定的位置,在请求的水平对齐前,系统按要求的垂直对齐调整. $TPM_WORKAREA --- 限制在弹出窗口在工作区内.如果未设置此标志,弹出窗口仅限制在有输入点的工作区. |
$tExclude | [可选参数] 包含被排除矩形的 $tagRECT 结构. |
成功: | 返回包含弹出窗口位置的 $tagRECT 结构. |
失败: | 返回 0,并设置@error标志为非 0 值. |
在MSDN中搜索
#Include <WinAPIEx.au3>
Opt('MustDeclareVars', 1)
If _WinAPI_GetVersion() < '6.1' Then
MsgBox(16, 'Error', 'Require Windows 7 or later.')
Exit
EndIf
Global $hForm, $Msg, $Button
$hForm = GUICreate('MyGUI', 400, 400)
$Button = GUICtrlCreateButton('New Window', 145, 366, 110, 23)
GUISetState()
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case -3
ExitLoop
Case $Button
_PopupDlg($hForm)
EndSwitch
WEnd
Func _PopupDlg($hParent)
GUISetState(@SW_DISABLE, $hParent)
Local $hDlg, $Msg, $Button, $tRECT, $tPOINT = DLLStructCreate($tagPOINT)
For $i = 1 To 2
DllStructSetData($tPOINT, $i, 0)
Next
_WinAPI_ClientToScreen($hParent, $tPOINT)
$hDlg = GUICreate('New Window', 400, 400)
$Button = GUICtrlCreateButton('Close', 165, 366, 70, 23)
$tRECT = _WinAPI_CalculatePopupWindowPosition(DllStructGetData($tPOINT, 1), DllStructGetData($tPOINT, 2), _WinAPI_GetWindowWidth($hDlg), _WinAPI_GetWindowHeight($hDlg))
WinMove($hDlg, '', DllStructGetData($tRECT, 1), DllStructGetData($tRECT, 2))
GUISetState(@SW_SHOW, $hDlg)
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case -3, $Button
ExitLoop
EndSwitch
WEnd
GUISetState(@SW_ENABLE, $hParent)
GUIDelete($hDlg)
EndFunc ;==>_PopupDlg