|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Инструмент 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 или CreatePenIndirect (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 – цвет пера; для перьев всех стилей, кроме PS _ INSIDEFRAME, преобразуется в ближайший чистый цвет, стиль PS _ INSIDEFRAME позволяет использовать полутона при ширине больше 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)); Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |