Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Визуальное программирование / Визуальное программирование_лекция_16.pps
Скачиваний:
38
Добавлен:
07.06.2015
Размер:
265.22 Кб
Скачать

API функции для создания

регионов

function CreatePolygonRgn(const Points; Count, FillMode: Integer): HRGN;

Функция CreatePolygonRgn создает регион, ограниченный многоугольником, вершины которого заданы в массиве Points (элемент массива – пара координат x, y). Параметр Count указывает количество точек в массиве, FillMode определяет, какие точки будут принадлежать региону.

function CreatePolyPolygonRgn (const pPtStructs; const pIntArray; p3, p4: Integer): HRGN;

Функция CreatePolyPolygonRgn создает регион, состоящий из нескольких регионов. Параметр pPtStructs является массивом массивов точек, pIntArray является массивом, содержащем количество точек (вершин) для каждого из регионов, p3 – количество

регионов, p4 – режим заполнения.

11

 

API функции для создания

регионов

function CreateEllipticRgn(X1, Y1, X2, Y2: Integer): HRGN; function CreateEllipticRgnIndirect(const p1: TRect): HRGN;

Функции создают эллиптический регион (эллипс вписан в прямоугольник, заданный в первом случае координатами верхнего левого и нижнего правого углов, во втором - структурой p1: TRect с такими же координатами).

12

Дополнительные функции для работы с регионами

 

function

Объединяет две области в одну.

CombineRgn

DestRgn – дескриптор результирующей области;

(DestRgn,

Rgn1,

Rgn1, Rgn2 – дескрипторы объединяемых областей;

Rgn2:

Cardinal;

CombineMode – параметр, указывающий способ объединения.

CombineMode:

Параметр CombineMode может иметь следующие значения:

Ineger): Integer;

RGN_AND – включает в результат общие части областей;

 

 

RGN_COPY– копирует область Rgn1 в DestRgn;

 

 

RGN_DIFF – исключает из Rgn1 часть, принадлежащую Rgn2;

 

 

RGN_OR – объединяет области;

 

 

RGN_XOR – включает в результат только те части областей,

 

 

которые не принадлежат им одновременно.

 

 

До применения функции область DestRgn уже должна

 

 

существовать и иметь размеры, достаточные для размещения

 

 

объединенной области.

function

 

Проверяет эквивалентность двух областей. Rgn1, Rgn2 -

EqualRgn(Rgn1,Rgn

дескрипторы сравниваемых областей.

2: Cardinal): Bool;

13

 

 

Дополнительные функции для работы с регионами

function

FillRgn(DC,

Закрашивает область кистью.

Rgn,Brush:

Cardinal): Bool;

DC – дескриптор канвы окна;

 

 

Rgn – дескриптор области;

 

 

Brush – дескриптор кисти.

function

FrameRgn(DC,

Обводит область кистью высотой Height и

Rgn,Brush:

Cardinal;

шириной Width пикселей.

Width,Height:

Integer): Bool;

DC – дескриптор канвы окна;

 

 

Rgn – дескриптор области;

 

 

Brush – дескриптор кисти.

Function

InvertRgn(DC,

Инвертирует цвет всех точек внутри области.

Rgn:Cardinal): Bool;

DC – дескриптор канвы окна;

 

 

Rgn – дескриптор области.

14

Дополнительные функции для работы с регионами

function

OffsetRgn(DC,

Смещает область на dX по горизонтали и на

Rgn:Cardinal; dX, dY:

dY по вертикали. DC - дескриптор канвы окна;

Integer):Integer;

Rgn - дескриптор области.

function

PaintRgn(DC,

Rgn - дескриптор области.

Rgn:Cardinal): Bool;

 

function

 

Проверяет принадлежность точки (X,Y) области

PtInRegion(Rgn:Cardinal;

с дескриптором Rgn.

X, Y: Integer):Bool;

 

function

 

Проверяет принадлежность прямоугольника

RectInRegion(Rgn:Cardinal

Rect области с дескриптором Rgn.

; Rect: TRect):Bool;

15

 

 

Назначение региона окну

Назначение региона окну производится при помощи процедуры: Procedure SetWindowRgn(

HWND hWnd,

// дескриптор окна

HRGN hRgn,

// дескриптор региона

BOOL bRedraw // флаг, управляющий перерисовкой окна после назначения региона);

end;

16

 

Пример

procedure TForm1.RebuildWindowRgn;

Var

Rgn, Rgn1 : HRGN; // Регионы

Begin

// Настройка размеров окна

Height := 400; Width := 600;

// Создание эллиптического региона размером с окно Rgn := CreateEllipticRgn(0, 0, width, height);

//Создание прямоугольного региона Rgn1 := CreateRectRgn(50, 50, 100, 100);

//Комбинирование регионов по RGN_XOR (сумма за вычетом пересечения) CombineRgn (Rgn, Rgn, Rgn1, RGN_XOR);

//Создание региона

Rgn1 := CreateRectRgn(250, 250, 100, 100);

//Комбинирование регионов по RGN_DIFF (Rgn - Rgn1) CombineRgn(Rgn, Rgn, Rgn1, RGN_DIFF);

//Назначение региона текущему окну

SetWindowRgn(Handle, Rgn, true);

17

end;

 

Пример

В результате окно становится эллиптическим, внутри окна есть прозрачная прямоугольная и "дырка", в левом углу к нему добавлена прямоугольная область (хорошо видна работа CombineRgn в режиме RGN_XOR).