АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Инструмент Pen

Читайте также:
  1. А. Самонаблюдение без помощи инструментов
  2. Акты проверки и браковки инструмента
  3. Амортизационная политика предприятия, как инструмент управления основным капиталом
  4. Бюджетирование как инструмент гибкого развития предприятия СКСиТ
  5. Бюджетирование как инструмент финансового менеджмента
  6. Бюджетно-налоговая (фискальная) политика: цели, виды, инструменты, эффективность. Особенности бюджетно-налоговой политики в Республике Беларусь.
  7. ВАЛЮТНОЕ РЕГУЛИРОВАНИЕ И ЕГО ИНСТРУМЕНТЫ
  8. Ведомость потребности в мерительном инструменте на годовую программу
  9. Ведомость расчета количества режущего инструмента
  10. Виды возражений и претензий клиентов как инструмент диагностики возражения для выбора способа реагирования на него
  11. Виды и инструменты кредитно-денежной политики
  12. Влияние ультразвукового хирургического инструмента на рассекаемую ткань

Для отображения контурных примитивов используется перо, выбранное в контексте, определяющее цвет, ширину и стиль линии, который может быть сплошным (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));


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 |


Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.006 сек.)