函数参考


_WinAPI_CalculatePopupWindowPosition

(指定定位点,弹出窗口的大小,标志以及可选排除矩形)计算弹出窗体的适当位置.

#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 值.

注意/说明

本函数需要 Windows 7 或以上版本系统.

相关

详情参考

在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