Excel. Трюки и эффекты
Шрифт:
Win32 API позволяет получать три типа контекста устройства экрана: контекст класса, общий и частный контексты. Контекст класса и частные контексты устройства используются в приложениях, выполняющих многочисленные операции вывода. Например, программы автоматизированного проектирования, настольные издательские системы, то есть такие приложения, которые самостоятельно и постоянно осуществляют вывод, и соответственно время, затрачиваемое на эти операции, критично с точки зрения производительности. Общие контексты устройства используются в приложениях, выполняющих операции вывода лишь время от времени.
Контекст класса поддерживается только для совместимости с предыдущими версиями Windows. При
Общий контекст устройства – контекст устройства экрана, который обрабатывается в специальном кэше системы. Такие контексты устройства используются в приложениях, осуществляющих операции вывода не очень часто. Перед тем как система возвращает описатель контекста устройства, она предварительно инициализирует общие контексты устройства значениями по умолчанию, которые можно менять по мере необходимости при помощи специальных функций. Любая операция вывода, выполняемая приложением, будет использовать значения по умолчанию до тех пор, пока не будет вызвана одна из функций GDI для выбора нового графического объекта, изменения атрибутов существующего объекта или выбора нового режима. Поскольку может быть создано лишь определенное количество общих контекстов устройства, то приложение обязано освободить его после того, как осуществит операции вывода. Когда приложение освобождает общий контекст устройства, все произведенные в данных изменения по умолчанию будут отменены. В результате параметры необходимо устанавливать каждый раз заново.
Частный контекст устройства, в отличие от общего, сохраняет любые изменения для заданных по умолчанию данных. Этот контекст устройства не является частью системного кэша и поэтому не должен освобождаться. Система автоматически освободит его только после того, как последнее окно будет разрушено. Приложение создает частный контекст устройства (указав предварительное SOWNDC стиль окна) при заполнении структуры, описывающей класс окна, регистрируемого функцией RegisterClass. После создания окна с указанным стилем приложение может вызвать одну из функций (GetDC, GetDCEx или BeginPaint) для получения описателя, идентифицирующего частный контекст устройства. Приложение может использовать его до тех пор, пока не будет разрушено окно, созданное с этим классом. Любые изменения графических объектов и их атрибутов или графических режимов сохраняются системой, пока окно не удалено.
Контекст устройства принтера
Контекст устройства принтера может использоваться одинаково как для матричного, струйного и лазерного принтера, так и для плоттера. Приложение создает данный контекст устройства посредством вызова функции CreateDC. При этом задаются такие необходимые параметры, как имя драйвера принтера, имя принтера, файла или имени устройства для физической среды вывода и других параметров инициализации. Когда приложение завершает операцию печати, то требуется вызвать функцию DeleteDC для удаления созданного контекста. Заметьте, что созданный контекст устройства принтера должен быть удален посредством именно этой функции. Освобождение с помощью функции ReleaseDC невозможно.
Точно так же, как приложению требуется контекст устройства экрана прежде, чем оно сможет осуществлять операции вывода в клиентскую область окна, нужен контекст устройства принтера прежде, чем можно будет осуществлять операции вывода на принтер. Контекст устройства принтера, подобно контексту устройства экрана, содержит информацию о графических объектах и их атрибутах, а также о графических режимах, которые воздействуют на операции вывода. Графические объекты включают карандаш (для рисования линий), кисть (для заливки) и шрифт (для вывода текста).
В отличие от контекста устройства экрана,
Если вы вызываете функцию CreateDC, то обязаны указать драйвер принтера и порт. Для получения этих данных можно воспользоваться одной из функций: GetPrinter или EnumPrinters.
Контекст устройства памяти
Чтобы дать возможность приложениям осуществлять операции вывода в память вместо работы с фактическим устройством, используется специальный контекст устройства для растровых операций, который называется контекстом устройства памяти. Возможность осуществлять операции вывода в памяти может понадобиться для улучшения характеристик вывода изображений. Контекст устройства памяти дает возможность системе обработать часть памяти как виртуальное устройство. Это массив битов в памяти, которые приложение может временно использовать для сохранения данных растрового изображения, созданного на нормальной поверхности для рисования. Поскольку точечный рисунок совместим с устройством, то иногда контекст устройства памяти упоминается как совместимый.
Контекст устройства памяти сохраняет растровые изображения для специфического устройства. Приложение может создать данный контекст посредством вызова функции CreateCompatibleDC. Результатом ее выполнения является растровое изображение, имеющее цветной формат, совместимый с форматом первоначального устройства.
Первоначально изображение в контексте устройства памяти имеет размер 1x1 пиксел. Прежде чем приложение сможет начать работать с изображением, оно должно установить битовый массив с соответствующей шириной и высотой в контекст устройства, вызывая функцию SelectOb j ect.
Когда приложение передает описатель, который получен при помощи функции CreateCompatibleDC (одной из функций рисования), то запрашиваемая операция вывода не осуществляется на поверхности рисунка устройства. Вместо этого система сохраняет цветовую информацию для результирующей линии, кривой, текста или региона в битовом массиве. Приложение может копировать изображение, хранящееся в памяти, обратно на поверхность рисунка посредством вызова функции BitBlt, указывая в качестве источника контекст устройства памяти, а в качестве приемника – контекст устройства окна или экрана.
Информационный контекст устройства
Win32 API поддерживает информационный контекст устройства, используемый, чтобы восстановить или получить заданные по умолчанию параметры устройства. Для создания информационного контекста приложение должно вызвать функцию CreatelC. Для получения информации об объектах, заданных по умолчанию для интересующего устройства, используются функции GetCurrentOb j ect и GetObject. Использование информационного контекста устройства более эффективно, чем контекстов других типов, потому как Win32 API работает с информационным контекстом на более низком уровне и не создает структур, необходимых для их работы. После завершения работы приложения с информационным контекстом устройства необходимо вызвать функцию DeleteDC для удаления созданного контекста.
6.4. Графические режимы
Операционная система Windows поддерживает пять различных графических режимов, которые позволяют приложениям определять тип смешивания цветов, место и параметры вывода и т. д.:
• настройки фона – определяет, как происходит смешивание цветов фона текстовых объектов и растровых изображений с цветом фона поля вывода;
• отображения – определяет, как происходит смешивание цвета карандашей, кистей, текстовых объектов и растровых изображений с цветом фона;