русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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

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

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

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

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

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

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

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

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

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

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

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

Перо(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 определяет тип линии и может иметь одно из следующих значений:

Значение iPenStyle Тип линии
PS_SOLID    
PS_DASH    
PS_DOT    
PS_DASHDOT    
PS_ DASHDOTDOT    
PS_INSIDEFRAME    

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

Параметр 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);

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

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

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

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

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

 
 


0 Blue Green Red

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

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

Просмотров: 547


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.