Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Инструмент Pen



Для отображения контурных примитивов используется перо, выбранное в контексте, определяющее цвет, ширину и стиль линии, который может быть сплошным (solid), точечным (dotted) или пунктирным (dashed).

По умолчанию устанавливается одно из трех стандартных перьев, рисующих сплошные линии толщиной в единицу, выбранного цвета: BLACK­PEN – черное перо, WHITE _ PEN – белое перо и NULL _ PEN – пустое перо, которое ничего не рисует.

Определив переменную, например, hPen типа HPEN (описатель пера – handle to a pen): HPEN hPen; получить описатель одного из стандартных перьев, например белого пера, можно, вызывая функцию

hPen = GetStockObject (WHITE_PEN);

сделаем это перо текущим, вызвав функцию

SelectObject (hdc, hPen);

После этого все линии будут использовать белое перо до тех пор, пока не выберем другое перо в контекст устройства или пока не освободим контекст устройства.

Все вышесказанное можно совместить в одной инструкции:

hPen = SelectObject (hdc, GetStockObject (WHITE_PEN));

Если это первый вызов, функция SelectObject возвращает описатель того пера, которое уже было выбрано в контексте устройства; текущим пером становится белое, а переменная hPen получает описатель предыдущего (по умолчанию – черного) пера, вернуться к которому можно, используя вызов

SelectObject (hdc, hPen);

Для создания пера используются функции CreatePen или CreatePen­Indirect (ExtCreatePen).

Функция CreatePen:

hPen = CreatePen (iPenStyle, iWidth, rgbColor);

параметр iPenStyle определяет стиль линии и может принимать одно из семи значений (семь стилей пера): PS _ SOLID – сплошное, PS _ DASH, PS _ DOT, PS _ DASHDOT, PS _ DASHDOTDOT – штриховое, пунктирное и штрихпунктирное, PS _ NULL – нерисующее (пустое) перо, PS _ INSIDEFRAME – внутренняя обводка, в замкнутом контуре автоматически отступает внутрь в соответствии с толщиной линии.

Для стилей PS _ SOLID, PS _ NULL и PS _ INSIDEFRAME параметр iWidth задает ширину пера, при iWidth = 0 – перо шириной в один пиксел.

Параметр rgbColor – цвет пера; для перьев всех стилей, кроме PSINSIDE­FRAME, преобразуется в ближайший чистый цвет, стиль PS _ INSIDE­FRAME позволяет использовать полутона при ширине больше 1.

Можно создать перо, определив структуру LOGPEN logpen («логи­ческое перо» – logical pen), содержащую поля:

lopnStyle (UINT) – стиль пера;

lopnWidth (POINT) – ширина пера в логических единицах измерения;

lopnColor (COLORREF) – цвет пера.

Затем создаем перо, передавая адрес структуры в функцию CreatePenIndirect:

hPen = CreatePenIndirect (&logpen);

Получить информацию об уже существующем пере можно, используя функцию

GetObject (hPen, sizeof(LOGPEN), &logpen);

Функции CreatePen и CreatePenIndirect не требуют описателя контекста устройства. Эти функции создают логические перья, которые никак не связаны с контекстом устройства до тех пор, пока не вызвать функцию SelectObject.

Рассмотрим метод создания, выбора и удаления перьев. Предположим, в программе используются два пера – красное шириной 3 и черное точечное. Определим переменные для хранения описателей этих перьев:

static HPEN hPen1, hPen2;

В процессе обработки сообщения WM_CREATE создадим перья:

hPen1 = CreatePen (PS_SOLID, 3, RGB (255, 0, 0));

hPen2 = CreatePen (PS_DOT, 0, 0);

В процессе обработки сообщения WM_PAINT или когда есть действительный контекст устройства, выберем одно из этих перьев в контекст устройства и можем рисовать, используя его:

SelectObject (hdc, hPen2);

[функции рисования линий]

SelectObject (hdc, hPen1);

[другие функции рисования линий]

В процессе обработки сообщения WM_DESTROY удалить их:

DeleteObject (hPen1);

DeleteObject (hPen2);

Можно создать перья в процессе обработки сообщения WM _ PAINT и удалить их после вызова EndPaint.

Можно объединить вызовы функций CreatePen и SelectObject в одну инструкцию:

SelectObject (hdc, CreatePen (PS_DASH, 0, RGB (255, 0, 0)));

Удалить перо можно, выбрав стандартное перо BLACK _ PEN в контекст устройства и удаления значения, возвращаемого функцией SelectObject:

DeleteObject (SelectObject (hdc, GetStockObject (BLACK_PEN)));

Выбирая только что созданное перо в контекст устройства, сохраним описатель, возвращаемый функцией SelectObject:

hPen = SelectObject (hdc, CreatePen (PS_DASH, 0, RGB (255, 0, 0)));

Если это первый вызов, hPen – описатель стандартного черного пера, мы можем теперь выбрать его в контекст устройства и удалить созданное перо (описатель, возвращаемый вызовом функции SelectObject) в одной инструкции:

DeleteObject (SelectObject (hdc, hPen));





Дата публикования: 2015-09-17; Прочитано: 205 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...