Объекты и атрибуты контекста устройства

 

 

Контекст является объектом Windows. В свою очередь, сам контекст содержит в себе описатели некоторых объектов, которые используются при работе с контекстом ( Например, при рисовании линий, прямоугольников, областей и т.п. ) . К этим объектам относятся:

 

 

·Перо ( PEN ) определяет цвет, ширину, стиль линии, которой выполняется рисование всеми функциями API .

 

 

·Кисть ( BRUSH ) определяет цвет и режим фона, которыми заполняются пустоты.

 

 

Для использования объектов в программе, как уже говорилось ранее, используются описатели объектов, для создания которых существуют предопределенные типы описателей: HPEN (handle to pen) для пера и HBRUSH - для кисти . Таким образом, если в программе будет необходимо использовать данные объекты, прежде всего, необходимо определить переменные-описатели, например,

 

 

HPEN MyPen; // определение описателя пера.

 

 

HBRUSH MyBrush; // определение описателя кисти.

 

 

Оба приведенных выше объекта поддерживают три основных функции работы с ними:

 

 

·Создание нового объекта.

 

 

·Выбор объекта (из множества предопределенных в Windows ).

 

 

·Удаление объекта.


 

 

Рассмотрим подробнее эти объекты и функции работы с ними.

 

 

Перо ( PEN ) определяет цвет, ширину, стиль линии, которой выполняется рисование всеми функциями API . Перо, устанавливаемое в контексте устройства по умолчанию, называется BLACK_PEN (черное перо) . Это перо рисует сплошные черные линии толщиной в один пиксел независимо от режима отображения ( mapping mode ). Windows поддерживает еще два стандартных пера – это WHITE_PEN( белое перо ) и NULL_PEN( пустое перо, т.е. «рисующее» прозрачным цветом ).

 

 

Получить описатель одного из стандартных (предопределенных в Windows ) перьев можно используя функции GetStockObject:

 

 

MyPen = GetStockObject(WHITE_PEN);

 

 

Переменной MyPen, в данном случае, присваивается адрес памяти, где расположена структура данных, соответствующая белому перу. Если такого пера не существует, функция возвращает нулевой ( NULL ) описатель. Программа может использовать выбранную кисть через ее описатель MyPen. Выбранное перо может использоваться в любом контексте, однако, для этого его нужно передать нужному контексту (ведь, в любой момент времени в контексте выбрано какое-то свое перо). Выбор пера в конкретный контекст осуществляется путем выполнения стандартной функции выбора объекта в контекст:

 

 

HPEN OldPen;

 

 

OldPen = SelectObject(hdc, MyPen);

 

 

Выполнив функцию SelectObject, мы тем самым устанавливаем в контексте hdc новое перо, и все функции рисования на этом контексте будут выполняться на основе этого пера. При это возникает вопрос: что при этом происходит со старым пером? Описатель старого пера возвращается в программу как результат функции SelectObject, а контекст "забывает" о существовании старого пера. На это следует обратить внимание, так как, если старое перо было перед этим создано вашей программой и не используется больше никем, оно останется в памяти компьютера как "мусор". Считается хорошим стилем программирования, если программа после работы с контекстом возвращает старые объекты в контекст после завершения работы с контекстом, и сама уничтожает созданные ею объекты. Однако, если старое перо не было создано Вашей программой, удалять его нельзя.

 

 

Создать новое перо можно при помощи функции CreatePen :

 

 

MyPen = CreatePen(iPenStyle, iWidth, rgbColor);

 

 

Параметр iPenStyle определяет тип линии и может иметь одно из следующих значений:

 

Параметр iWidth определяет ширину линии в пикселях (если значение этого параметра 0 – ширина линии равна одному пикселю).


– 23 –

 

 

Параметр rgbColor определяет цвет пера. Как получить цвет значение этого параметра будет рассмотрено позже.

 

 

Последняя операция, доступная пользователю, над пером – это удаление. Для ее реализации используется функция стандартного удаления объектов (т.е. ее можно использовать для удаления , как перьев так и кисти):

 

 

DeleteObject(MyPen);

 

 

Еще один вопрос, который не рассмотрен относительно перьев, заключается в следующем: мы определили ширину и стиль линии, но каким образом будут заполнятся пустоты, например, между штрихами? Программа может установить цвет фона заполнения для данного контекста следующим образом:

 

 

SetBkColor(hdc, rgbColor);

 

 

а также может определить текущий цвет фона в контексте:

 

 

QColor = GetBkColor(hdc);

 

 

Кисть ( BRUSH ) определяет цвет и режим фона, которыми заполняются пустоты. По умолчанию, это стандартная кисть WHITE_BRUSH . Следовательно, внутренняя область фигуры будет закрашена белым цветом. Windows имеет шесть стандартных ( stock ) кистей: WHITE_BRUSH ( белая кисть ), LTGRAY_BRUSH ( светло-серая кисть ), GRAY_BRUSH ( серая кисть ), DKGRAY_BRUSH (темно-серая кисть ), BLACK_BRUSH (черная кисть ), NULL_BRUSH или HELLOW_BRUSH (пустая кисть ).

 

 

Получение описателя стандартной кисти и ее выбор в контекст аналогично получению стандартного пера:

 

 

HBRUSH MyBrush, OldBrush; // объявление описателей кисти

 

 

MyBrush = GetStockObject(BLACK_BRUSH); // Получение стандартной черной кисти.

 

 

OldBrush=SelectObject(hdc,MyBrush); // Выбор кисти в контекст

 

 

// Рисование

 

 

SelectObject(hdc,OldBrush); // Выбор в контекст старой кисти

 

 

Для создания кисти Windows имеет несколько функций.

 

 

Самый простой фон задает только чистый (solid) цвет:

 

 

MyBrush = CreateSolidBrush(rgbColor);

 

 

Вы можете также создать штриховую (hatch) кисть при помощи следующей функции:

 

 

MyBrush = CreateHathBrush(iHatchStyle, rgbColor);

 

 

где параметр iHatchStyle задает стиль штриховки:


 

 

Вы можете создать кисть, используя свою собственную штриховку:

 

 

MyBruch = CreatePatternBrush(hBitmap);

 

 

где hBitmap – описатель битового образа.

 

 

Так же, как и в случае с пером, программа должна удалить все созданные ею кисти при помощи уже знакомой нам процедуры DeleteObject:

 

 

DeleteObject(MyBrush);

 

 

В заключении разговоров об объекте можно повторить общие правила, которые мы обсудили при их рассмотрении :

 

 

·Удаляйте все созданные вами объекты.

 

 

·Не удаляйте объекты, пока они выбраны в контексте.

 

 

·Не удаляйте стандартные объекты.

 

 

В обоих объектах, как в прочем и в самом контексте, используется понятие цвета. Windows использует 32-разрядное беззнаковое целое для представления цвета. Тип данных для цвета называется COLORREF. Младшие три байта задают красную, зеленую и голубую составляющую, величина которых находится в интервале от 0 до 255, как показано на рисунке. Таким образом, палитра может иметь 2 24 цвета.

 

Для задания цвета вы можете определить соответствующие байты слова самостоятельно, либо использовать функцию RGB:


– 25 –

 

 

COLORREF MyColor = RGB(255,0,0); // определение синего цвета

 

 








Дата добавления: 2016-11-22; просмотров: 673;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.019 сек.