Функция CombineRgn

Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long,_ 
    ByVal hSrcRgn1 As Long,_ 
	ByVal hSrcRgn2 As Long,_ 
	ByVal nCombineMode As Long) As Long

CombineRgn комбинирует два региона в другой регион различными способами.

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

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

ERROR = 0
Ошибка при попытке комбинирования регионов
NULLREGION = 1
Полученный регион пуст
SIMPLEREGION = 2
Полученный регион в форме прямоугольника
COMPLEXREGION = 3
Полученный регион, содержащий более одного прямоугольника

Параметры

hDestRgn
Описатель получаемого региона. Регион уже должен существовать перед вызовом функции
hSrcRgn1
Первый исходный регион
hSrcRgn2
Второй исходный регион
nCombineMode
Флаг, определяющий способ комбинирования регионов
RGN_AND = 1
Получаемый регион содержит пересечение двух регионов
RGN_OR = 2
Получаемый регион содержит все точки двух исходных регионов
RGN_XOR = 3
Получаемый регион содержит результат исключающего объединения двух исходных регионов(точки находятся в одном исходном регионе, но не в обеих сразу)
RGN_DIFF = 4
Получаемый регион содержит часть первого исходного региона, кроме той части, которая пересекается со вторым исходным регионом
RGN_COPY = 5
Получаемый регион идентичен первому исходному региону. Второй регион игнорируется

Пример

' смотри также пример region.zip
' На окне Form1 создадим
' два пересекающих региона, закрасив результат комбинирования другим цветом
Dim hRgn1 As Long, hRgn2 As Long  ' эллиптический и прямоугольных исходные регионы
Dim hXorRgn As Long  ' получаемый регион
Dim hLightBrush As Long  ' дескриптор серой кисти
Dim lRet As Long ' возвращаемое значение

' Создаем два региона и третий для получения дескриптора
hRgn1 = CreateEllipticRgn(100, 50, 200, 100)
hRgn2 = CreateRectRgn(150, 75, 300, 200)
hXorRgn = CreateRectRgn(0, 0, 0, 0)
Form1.BackColor = vbGreen
' комбинируем регионы xor-способом
lRet = CombineRgn(hXorRgn, hRgn1, hRgn2, RGN_XOR)
' Установим кисть серого цвета и заполним полученный регион
hLightBrush = GetStockObject(LTGRAY_BRUSH)
lRet = FillRgn(Form1.hDC, hXorRgn, hLightBrush)
' Удаляем регионы для освобождения ресурсов
lRet = DeleteObject(hRgn1)
lRet = DeleteObject(hRgn2)
lRet = DeleteObject(hXorRgn)

Категория

Регионы

Реклама