Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_7_asm.doc
Скачиваний:
6
Добавлен:
13.11.2019
Размер:
574.98 Кб
Скачать

Створення регіональних контурів

Під регіональним контуром розуміється об‘єкт, що описує певну область як сукупність точок або підмножин областей. Іншими словами регіон описує контур (область) видимості (малювання). Цей інструмент є дуже потрібний для будування специфічних об’єктів. Нижче наведений список функцій роботи з регіонами.

Функція

Опис

CombineRgn

Комбінує 2 регіони (перетин, вирізання, об‘єднання ітд )

CreateEllipticRgn

Ств. регіон у вигляді еліпса

CreateEllipticRgnIndirect

Ств. Регіон у вигляді еліпса (за допомогою структури RECT)

CreatePolygonRgn

Ств. регіон з полігону точок

CreatePolyPolygonRgn

Ств. регіон з полігонних областей точок

CreateRectRgn

Ств. регіон прямокутник

CreateRectRgnIndirect

Ств. регіон прямокутник з структури RECT

CreateRoundRectRgn

Ств. регіон прямокутник з не гострими кутами

EqualRgn

Перевіряє 2 регіони на ідентичність.

ExtCreateRegion

Ств. регіон на основі спеціальних МЕТА-даних.

FillRgn

Зафарбовує регіон певним кольором.

FrameRgn

Малює границю доокола регіону

GetPolyFillMode

Визначає поточний тип заповнення/замальовування регіону

GetRegionData

Повертає масив точок, які описують регіональну область

GetRgnBox

Повертає фізичні параметри і записує у структуру RECT

InvertRgn

Інвертує колів в певній області

OffsetRgn

Переміщує регіон на певне зміщення

PaintRgn

Малює регіон на певному DC.

PtInRegion

Визначає чи входить точка (X,Y) в задану область регіону

RectInRegion

Визначає чи "влазить" прямокутник у область регіону

SetPolyFillMode

Встановлює стиль заповнення регіону

SetRectRgn

Конвертує регіон у прямокутник не чіткою портую (не гострими кутами)

Приклад.1

.data

x POINT <150,150>

POINT <250,100>

POINT <100,100>

.code

…….

DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

LOCAL hr:DWORD

mov eax,uMsg

.if eax==WM_INITDIALOG

invoke GetDC,hWin

mov hdc1,eax

.elseif eax==WM_COMMAND

.if wParam == 1001

invoke CreatePolygonRgn,addr x,3,WINDING ; ств. регіон

mov hr,eax

invoke CreateSolidBrush,00A8A8FFh ; ств. щітку

push eax

invoke FillRgn,hdc1,hr,eax ; замалювали регіон

call DeleteObject ; витерли щітку (хендл вже у стеку)

invoke DeleteObject,hr ; знищуємо регіон

.endif

.elseif eax==WM_CLOSE

invoke ReleaseDC,hWin,hdc1

invoke EndDialog,hWin,0

.else

mov eax,FALSE

ret

.endif

mov eax,TRUE

ret

DlgProc endp

……

Приклад 2

.data

x POINT <0,0>

POINT <550,500>

POINT <500,100>

y POINT <0,500>

POINT <250,0>

POINT <500,200>

.code

.elseif eax==WM_COMMAND

.if wParam == 1001

invoke CreatePolygonRgn,addr x,3,1

mov hr1,eax

invoke CreatePolygonRgn,addr y,3,1

mov hr2,eax

invoke CombineRgn,hr1,hr1,hr2,RGN_OR

invoke SetWindowRgn,hWin,hr1,1

.endif

Зафарбовування регіональної області створення форми з "специфічним виглядом"

Мал. 5 регіони

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]