Функция CreatePolyPolygonRgn

Declare Function CreatePolyPolygonRgn Lib "gdi32" (lpPoint As POINTAPI, _
    lpPolyCounts As Long, _
	ByVal nCount As Long, _
	ByVal nPolyFillMode As Long) As Long

CreatePolyPolygonRgn создает область, состоящую из множества многоугольников. Вершины всех многоугольников передаются функции через массив lpPoint. Другой массив определяет, сколько точек в пределах того массива принадлежат каждому многоугольнику. Отдельные многоугольники никак не присоединяются, формируя область множественных несвязанных многоугольных областей. Обратите внимание, что заполняющийся режим для мультимногоугольной области(региона) должен быть определен явно.

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

В успешном случае функция возвращает описатель созданного региона или 0 в случае ошибки(используйте GetLastError для получения кода ошибки).

Параметры

lpPoint
Массив, содержащий вершину каждого многоугольника, составляющего новую область. Определите каждую точку для каждого многоугольника только однажды. См. пример для демонстрации того, как загрузить множественные многоугольники в этот массив
lpPolyCounts
Массив, определяющий, сколько вершин в массиве lpPoint, принадлежит каждому многоугольнику
nCount
Число элементов в массиве lpPolyCounts
nPolyFillMode
Один из следующих флажков, определяющих заполняющийся режим, используемый для каждого многоугольника в пределах области:
ALTERNATE = 1
Выбор между заполнением и не заполнением непрерывных секций, чьи границы определены краем (ями) многоугольника, пересекающегося через внутреннюю область многоугольника
WINDING = 2
Любая секция внутри многоугольника заполнена

Пример

' Инвертируем точки, находящиеся в пределах мультимногоугольной области на окне Form1
' Область составлена из треугольника и ромба
' Треугольник имеет вершину (25,25), (50,50),
' (25,50). Ромб имеет вершину (150,150), (200,200), (150,250) и (100,200)

Dim vertex(0 To 6) As POINTAPI ' содержит вершины каждого многоугольника
Dim numvertices(0 To 1) As Long  ' сколько вершин принадлежат каждому многоугольнику
Dim hrgn As Long  ' дескриптор к мультимногоугольной области
Dim retval As Long  ' возвращаемое значение

' Загрузим вершины треугольника в массив вершин
vertex(0).x = 25: vertex(0).y = 25 
vertex(1).x = 50: vertex(1).y = 50
vertex(2).x = 25: vertex(2).y = 50
numvertices(0) = 3  ' три вершины для треугольника

' Загрузим вершины ромба в массив вершин
vertex(3).x = 150: vertex(3).y = 150 
vertex(4).x = 200: vertex(4).y = 200 
vertex(5).x = 150: vertex(5).y = 250 
vertex(6).x = 100: vertex(6).y = 200  
numvertices(1) = 4  ' четыре вершины для ромба

' Создаем мультимногоугольную область и получаем дескриптор
hrgn = CreatePolyPolygonRgn(vertex(0), numvertices(0), 2, ALTERNATE)
' Инвертируем пикселы в пределах этой области на Form1
retval = InvertRgn(Form1.hDC, hrgn)
' Удаляем регион для освобождения ресурсов
retval = DeleteObject(hrgn)

Смотри также

CreatePolygonRgn

Категория

Регионы