Declare Function PtInRegion Lib "gdi32" (ByVal hRgn As Long, ByVal x As Long, ByVal y As Long) As Long
PtInRegion определяет, находится ли данная точка в пределах региона
Функция возвращает 0, если точка не внутри региона или ненулевое значение, если точка находится в регионе
' Рассмотрим линию, соединяющую правую верхнюю и левую нижнюю углы экрана ' и рассмотрим регион, сделанный левой верхней стороной этой линии. Определим, ' находится ли курсор мыши в пределах этой области или нет Dim swidth As Long, sheight As Long ' ширина и высота экрана Dim hRgn As Long ' дескриптор к треугольной области, объясненной выше Dim curpos As POINTAPI ' получаем местоположение курсора мыши Dim vertices(0 To 2) As POINTAPI ' Вершина региона Dim isinside As Long ' получает 0 если не внутри, иначе - ненулевое значение Dim retval As Long ' возвращаемое значение ' Получим ширину и высоту экрана. Используем эту информацию, чтобы создать регион swidth = GetSystemMetrics(SM_CXSCREEN) ' ширина экрана sheight = GetSystemMetrics(SM_CYSCREEN) 'высота экрана ' Загрузим вершину региона в массив и создадим его vertices(0).x = 0: vertices(0).y = 0 ' vertex #1: верхний левый угол экрана vertices(1).x = swidth: vertices(1).y = 0 ' vertex #2: верхний правый угол экрана vertices(2).x = 0: vertices(2).y = sheight ' vertex #3: нижний левый угол экрана hRgn = CreatePolygonRgn(vertices(0), 3, ALTERNATE) ' создаем регион ' получим местоположение курсора мыши retval = GetCursorPos(curpos) ' Определим, находится ли местоположение курсора в пределах региона isinside = PtInRegion(hRgn, curpos.x, curpos.y) If isinside = 0 Then Debug.Print "Курсор вне региона" Else Debug.Print "Курсор внутри региона" End If ' Удаляем регион для освобождения ресурсов retval = DeleteObject(hRgn)