• Контуры (paths) – используются для заполнения или выделения контура различных фигур.
6.2. Аппаратно-независимый графический вывод
Одна из главных особенностей Windows API – независимость графического вывода от устройства. Программное обеспечение, которое поддерживает независимость, содержится в двух динамически компонуемых библиотеках. Первая – gdi. dll – обеспечивает общий графический интерфейс устройства (Graphics Device Interface, GDI), а вторая является драйвером конкретного используемого устройства. В результате приложение использует тот интерфейс, который предоставляется первой библиотекой. Перед тем как произвести какую-либо операцию вывода на некоторое устройство, приложению необходимо запросить GDI о загрузке соответствующего драйвера (обычно это осуществляется автоматически и не требует дополнительных действий со стороны программиста). После загрузки соответствующего драйвера приложение может настроить ряд таких параметров вывода, как цвет линии и ее ширина, тип кисти и ее цветщрифт, область отсечения и т. д. Операционная система Windows обеспечивает хранение всех этих и других данных в специальной структуре, называемой контекстом устройства.
Стоит заметить, что GDI реализует интерфейс для рисования двухмерной графики. Это самый медленный способ отображения графики из существующих, однако самый простой для понимания основ. Используется он в основном для создания простых эффектов с минимальными усилиями.
Контекст устройства – структура, определяющая набор графических объектов и связанных с ними атрибутов и графических режимов, которые воздействуют на вывод. Графические объекты включают карандаши для рисования линий, кисти для закрашивания и заполнения, битовые образы для копирования или прокрутки части экрана, цветовые палитры для определения набора доступных цветов, области для отсечения и других операций, а также контуры для операций рисования и закрашивания.
Приложение не имеет прямого доступа к контексту устройства, и настройка параметров осуществляется посредством вызова соответствующих функций Win32 API.
Существуют четыре типа контекстов устройств:
• экранный – поддерживает операции рисования непосредственно на экране;
• принтера – поддерживает операции рисования непосредственно на принтере или плоттере;
• памяти – поддерживает операции рисования непосредственно в битовых массивах;
• информационный – поддерживает получение данных об устройстве.
Приложение может осуществлять следующие операции над контекстом устройства:
• перечисление существующих графических объектов;
• выбор новых графических объектов;
• удаление существующих графических объектов;
• сохранение графических объектов, их атрибутов и параметров графических режимов;
• восстановление графических объектов, их атрибутов и параметров графических режимов.
Помимо всего прочего, приложение может использовать контекст устройства для определения процесса графического вывода, прерывания длительных графических операций, начатых другим потоком многопоточного приложения, а также может инициализировать принтер.
Экранный контекст устройства
Приложение получает контекст устройства экрана посредством вызова функций BeginPaint, GetDC или GetDCEx. Полученный контекст устройства идентифицирует окно, в которое будет непосредственно осуществляться вывод. Как правило, приложение получает контекст устройства экрана непосредственно перед тем, когда ему необходимо рисовать в клиентской области. Когда приложение завершает вывод, то оно обязано освободить контекст устройства, вызвав одну из соответствующих функций: EndPaint или ReleaseDC.
Win32 API позволяет получать три типа контекста устройства экрана: контекст класса, общий и частный контексты. Контекст класса и частные контексты устройства используются в приложениях, выполняющих многочисленные операции вывода. Например, программы автоматизированного проектирования, настольные издательские системы, то есть такие приложения, которые самостоятельно и постоянно осуществляют вывод, и соответственно время, затрачиваемое на эти операции, критично с точки зрения производительности. Общие контексты устройства используются в приложениях, выполняющих операции вывода лишь время от времени.
Контекст класса поддерживается только для совместимости с предыдущими версиями Windows. При создании Win32-приложения вместо контекстов класса следует использовать частные контексты.
Читать дальше
Конец ознакомительного отрывка
Купить книгу