Функция _WinAPI_ScreenToClient

 ↑  ←  Описание функции


_WinAPI_ScreenToClient

Преобразует координаты заданной точки относительно экрана в координаты относительно клиентской области окна/элемента

#include <WinAPI.au3>
_WinAPI_ScreenToClient($hWnd, ByRef $tPoint)

Параметры

$hWnd Дескриптор окна / элемента управления, для которого выполняется преобразование
$tPoint $tagPOINT структура, содержащая экранные координаты для преобразования

Возвращаемое значение

Успех:Возвращает True
Ошибка:Возвращает False

Примечания

Функция использует окно, идентифицированное по параметру $hWnd и экранные координаты, содержащиеся в структуре $tagPOINT для вычисления клиентских координат. Затем заменяет экранные координаты в структуре на клиентские координаты. Новые координаты указаны относительно верхнего левого угла клиентской области указанного окна. В качестве окна могут использоваться любые элементы управления.

См. также

_WinAPI_ClientToScreen, $tagPOINT, _WinAPI_GetClientRect

См. также

Искать ScreenToClient в библиотеке MSDN

Пример

#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
_Main()

Func _Main()
    Local $aPos, $aPos
    Local $hWnd = GUICreate("Клиентские координаты мыши", 340, 200)
    GUISetState()

    ; Цикл выполняется, пока окно не будет закрыто
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_MOUSEMOVE ; мышь переместилась
                $aPos = _GetCursorClientPos($hWnd)
                ToolTip('X= ' & $aPos[0] & @CRLF & 'Y= ' & $aPos[1])
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
    GUIDelete()
EndFunc   ;==>_Main

Func _GetCursorClientPos($hWnd)
    Local $aPos = MouseGetPos() ; Получает абсолютные координаты
    Local $tPoint = DllStructCreate("int X;int Y") ; Создаёт структуру
    ; Вставляет координаты
    DllStructSetData($tPoint, "X", $aPos[0])
    DllStructSetData($tPoint, "Y", $aPos[1])
    _WinAPI_ScreenToClient($hWnd, $tPoint) ; Преобразовывает в клиентские
    ; Извлекает из структуры
    $aPos[0] = DllStructGetData($tPoint, "X")
    $aPos[1] = DllStructGetData($tPoint, "Y")
    Return $aPos
EndFunc   ;==>_GetCursorClientPos