Опис інструментів малювання

Як було зазначено вище, до графічних обєктів, які забезпечують виконання графічних операцій, відносяться піря, кисті, растрові зображення, палітри, шрифти Розглянемо загальний алгоритм роботи з інструментами малювання:

а) створити новий інструмент із заданими характеристиками з по
міццю функцій Create.. (Наприклад, CreatePen (Перо)) і запамятати
його дескриптор

б) використовувати функцію SelectObject для завантаження в контекст вуст
ройства дескриптора створеного інструменту з попередніми зі
зберіганням дескриптора старого інструменту, який був встановлений
за замовчуванням, якщо це перша зміна інструменту Зручність функції
SelectObject в тому, що вона повертає дескриптор того інструменту
з контексту, який буде замінений, що використовується для його збе
нения

в) використовувати новий інструмент для виведення зображення або
тексту

г) вибрати в контекст пристрою збережений дескриптор інстру
мента за умовчанням

д) знищити створені інструменти функцією DeleteObject
Створення нових інструментів зазвичай здійснюється при обра
ботке повідомлення WM_CREATE створення вікна, для якого необхідні нові інструменти

Вибір інструментів і малювання здійснюються при обробці WMPAINT, коли вже відомий контекст пристрою після відпрацювання BeginPaint Так як в контексті пристрою зберігається тільки один дескриптор інструменту малювання, то при зміні кисті або пера в процесі малювання необхідно завантажувати в контекст дескриптори необхідних інструментів у міру потреби Зберігати при цьому потрібно тільки дескриптор інструменту за замовчуванням, щоб його можна було відновити в контексті перед викликом функції EndPaint

Видалення створених інструментів, як правило, реалізується при обробці повідомлення WMDESTROY, хоча можна створювати і видаляти інструменти при обробці повідомлення WMPAINT

Відзначимо, що в Windows передбачений стандартний набір кистей, піря і шрифтів, які можуть бути використані в програмі Їх дескриптори створювати і знищувати не потрібно, їх потрібно зажадати для використання функцією GetStockObject і потім завантажити в контекст

Будь функція малювання ліній і кривих, а також контурів замкнутих фігур використовує перо (реп), дескриптор якого зберігається в контексті пристрою в даний момент За замовчуванням використовується перо BLACKPEN Воно малює суцільні чорні лінії товщиною 1 піксель незалежно від режиму відображення Крім чорного пера існує стандартне біле перо з шириною в 1 піксель (WHITEPEN), невидиме перо для виведення фігур без контуру (NULLPEN) Для малювання ліній різного кольору, товщини і стилю GDI дозволяє створювати логічні піря Логічне перо має дескриптор типу HPEN (handle to a pen) Будемо розглядати так звані прості піря Для них не суцільні лінії можна малювати тільки товщиною 1 піксель, а суцільні лінії можуть мати будь-яку товщину, але закруглені закінчення

Для отримання дескриптора простого пера викликаються функція CreatePen або CreatePenlndirect Функція CreatePen має три параметра:

1&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Стиль пера, визначальний порядок проходження пікселів і розташування лінії Можливі значення цього параметра наведені в таблиці 21

Товщина лінії в логічних одиницях Якщо в контексті пристрою використовується режим відображення за замовчуванням ММТЕХТ, то логічні одиниці збігаються з фізичними одиницями і виражаються в точках Якщо логічні одиниці не збігаються з фізичними, то фізична товщина пера встановлюється відповідно до масштабу, і товщина пера буде однаковою тільки в тому випадку, коли масштаби по обох осях однакові Якщо другий параметр дорівнює нулю, то товщина приймається рівною 1 пикселу незалежно від режиму відображення

Таблиця 21

Стиль

Вид лінії

Вирівнювання ня

Обмеження ня на товщину

PS SOLID

Суцільна

По центру

Ні

PS DASH

Пунктирна

По центру

&lt=1

PS DOT

Точкова

По центру

&lt=1

PS_DASHDOT

Пунктирно-точкова

По центру

&lt=1

PS_DASHDOTDOT

Відрізок і дві точки

По центру

&lt=1

PS_NULL

Чи не малюється

PSJNSIDEFRAME

Суцільна

Усередині кон-туру

&gt1

3 Колір пера, має тип COLORREF Зазвичай це значення задається або за допомогою макросу RGB, або за допомогою макросу PALETTERGB Перший варіант використовується, якщо пристрій виведення підтримує повний діапазон кольорів, який визначається 24-бітовим RGB-значенням Аргументами макросу є інтенсивності червоною, зеленою і синьою компонент кольору Другий варіант (макрос PALETTERGB) необхідно використовувати, якщо додаток працює з логічною палітрою, наприклад, для моделей дисплеїв, які підтримують тільки 256 кольорів В останньому випадку система Windows перетворює запитаний RGB-колір в найбільш близький колір з палітри

Отримання дескриптора пера за допомогою CreatePenlndirect вимагає заповнення структури типу LOGPEN, що включає поля, які описують стиль, товщину і колір пера

Після створення дескриптора пера з необхідними параметрами його необхідно завантажити в контекст пристрою за допомогою функції Se-lectObject Для малювання найпростіших геометричних фігур можна використовувати наступні функції:

-&nbsp MoveToEx переміщення поточної позиції пера в точку (х, у) Параметри дескриптор контексту пристрою, х-координата нової поточної позиції, у-координата нової поточної позиції, попередня позиція пера За замовчуванням поточна позиція пера встановлена ​​в точку (0,0)

-&nbsp GetCurrentPositionEx отримання поточної позиції пера Параметри hDC дескриптор контексту пристрою, адреса змінної pt типу POINT

-&nbsp LineTo малювання відрізка, починаючи з точки, в якій знаходиться поточна позиція пера, до точки (xEnd, yEnd), не включаючи її у відрізок Параметри дескриптор контексту пристрою, xEnd х-координата кінцевої точки, yEnd у-координата кінцевої точки

-&nbsp Polyline малювання ламаної лінії Параметри hDC, адреса масиву точок, кількість точок Функція Polyline не використовує поточну позицію пера і не змінює її

– Дуги малюються як частина еліпса Розміри і розташування еліпса визначаються обмежуючим прямокутником Обмежуючий прямокутник задається координатами лівої верхньої (xLeft, утором) і правої нижньої (xRight, yBottom) вершин Центром еліпса є точка (Хо, Уо), де xO = xLeft + (xRight xLeft) / 2, a y0 = утором + (yBottom утором) / 2 Для малювання дуг призначені функції Arc, ArcTo і AngleArc Як параметри крім координат точок, що задають еліпс, їм передаються координати початкової та кінцевої точок дуги

Відзначимо, що існує функція виведення одного пікселя SetPixel, проте подібний спосіб малювання був би дуже повільним

Всі функції малювання, розглянуті вище, малюють незамкнуті фігури Однак хотілося б мати можливість малювати замкнуті фігури і зафарбовувати їх внутрішні області Для цієї мети використовується кисть Кисть являє собою картинку розміром 8 * 8 пікселів, яка при зафарбовуванні дублюється по горизонталі і вертикалі До стандартних кистям відносяться BLACKBRUSH (чорна), DKGRAYBRUSH (темно-сіра), GRAYBRUSH (сіра), LTGRAYBRUSH (світло-сіра) WHITEBRUSH (біла, використовується за умовчанням), NULLBRUSH (порожній, без заливки), DCBRUSH (суцільна кольорова, за замовчуванням біла, інший колір після виклику SetDCBrushColor) Дескриптори всіх стандартних кистей запитуються по GetStockObject

Для отримання дескриптора нестандартної кисті використовуються наступні функції:

1    CreateSolidBrush однотонна кисть Параметр колір, формований RGB або PALETTERGB

2&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp CreateHatchBrush штрихова кисть Параметри стиль штрихування (HS_HORIZONTAL, HS_VERTICAL, HS_BDIAGONAL, HS_CROSS і тд), колір

3&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp CreatePatternBrush кисть з довільним малюнком у вигляді растрового зображення Параметр дескриптор растрового зображення

Для створення кисті будь-якого типу можна використовувати функцію CreateBrushlndirect

Малювання замкнутих фігур здійснюється за допомогою функцій:

Rectangle, FillRect, FrameRect, InvertRect і DrawFocusRect Прямокутник

Ellipse еліпс

Chord хорда

Pie сектор еліпса

RoundRect прямокутник із закругленими кутами

Poligon багатокутник

Джерело: Сучкова, ЛІ Win32 API: основи програмування: навчальний посібник / ЛІ Сучкова АлтГТУ ім ШІ Ползунова -Барнаул, АлтГТУ, 2010 138 с, іл

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*