Функция RectInRegion

Declare Function RectInRegion Lib "gdi32" (ByVal hRgn As Long, lpRect As RECT) As Long
RectInRegion определяет, находится ли прямоугольник в пределах данной области. Прямоугольник находится внутри региона, если любая его часть (не обязательно весь) находится в пределах региона

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

Функция возвращает 0, если прямоугольник полностью вне региона или ненулевое значение, если прямоугольник по крайней мере частично в пределах региона

Параметры

hRgn
Дескриптор области, чтобы определить, находится ли прямоугольник в ее пределах
lpRect
Прямоугольник, чтобы определить, находится ли по крайней мере частично в пределах области

Пример

' Рассмотрим линию, соединяющую правую верхнюю и левую нижнюю углы экрана
' и рассмотрим регион, сделанный левой верхней стороной этой линии. Определим
' находится ли окно 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)

Смотри также

PtInRegion

Категория

Регионы