Declare Function RectInRegion Lib "gdi32" (ByVal hRgn As Long, lpRect As RECT) As Long
Функция возвращает 0, если прямоугольник полностью вне региона или ненулевое значение, если прямоугольник по крайней мере частично в пределах региона
' Рассмотрим линию, соединяющую правую верхнюю и левую нижнюю углы экрана ' и рассмотрим регион, сделанный левой верхней стороной этой линии. Определим ' находится ли окно Form1 по крайней мере частично в пределах области Dim swidth As Long, sheight As Long ' ширина и высота экрана Dim hRgn As Long ' дескриптор к треугольной области, объясненной выше Dim winrect As RECT ' Получим прямоугольник Form1 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) ' создаем регион ' Получим прямоугольник окна Form1, идентифицируя углы окна retval = GetWindowRect(Form1.hWnd, winrect) ' Определим, находится ли прямоугольник в пределах региона isinside = RectInRegion(hRgn, winrect) If isinside = 0 Then ' не находится Debug.Print "Form1 полностью вне области" Else Debug.Print "Form1 находится по крайней мере частично внутри области" End If ' Удаляем регион для освобождения ресурсов retval = DeleteObject(hRgn)