Функция ExtEscape (wingdi.h)
Функция ExtEscape позволяет приложению получать доступ к возможностям устройств, недоступным через GDI.
Синтаксис
int ExtEscape(
[in] HDC hdc,
[in] int iEscape,
[in] int cjInput,
[in] LPCSTR lpInData,
[in] int cjOutput,
[out] LPSTR lpOutData
);
Параметры
[in] hdc
Дескриптор контекста устройства.
[in] iEscape
Escape-функция, выполняемая. Это может быть одна из следующих функций или escape-функция, определяемая приложением.
[in] cjInput
Количество байтов данных, на которые указывает параметр lpszInData .
[in] lpInData
Указатель на входную структуру, необходимую для указанного escape-файла. См. также примечания.
[in] cjOutput
Количество байтов данных, на которые указывает параметр lpszOutData .
[out] lpOutData
Указатель на структуру, которая получает выходные данные из этого escape-файла. Этот параметр не должен иметь значение NULL , если extEscape вызывается как функция запроса. Если данные не должны возвращаться в этой структуре, задайте для параметра cbOutput значение 0. См. также примечания.
Возвращаемое значение
Возвращаемое значение указывает результат функции. Значение больше нуля, если функция выполнена успешно, за исключением escape-экранирования принтера QUERYESCSUPPORT, который проверяет только реализацию. Возвращаемое значение равно нулю, если escape-файл не реализован. Возвращаемое значение меньше нуля указывает на ошибку.
Комментарии
Используйте функцию Escape , чтобы передать одно из системных escape-значений устройству, если escape-файл не является одним из определенных escape-файлов в nEscape. ExtEscape может неправильно работать с определяемыми системой escape-файлами. В частности, escape-операции, в которых lpszInData является указателем на структуру, содержащую элемент, являющийся указателем, завершаются ошибкой.
Обратите внимание, что поведение, описанное в этой статье, является ожидаемым поведением, но драйвер должен соответствовать этой модели.
Переменные, на которые ссылаются lpszInData и lpszOutData , не должны совпадать или перекрываться. Если входные и выходные переменные размера буфера перекрываются, они могут не содержать правильные значения после возврата вызова. Для получения наилучших результатов lpszInData и lpszOutData должны ссылаться на разные переменные.
Escape-функция принтера CHECKJPEGFORMAT определяет, поддерживает ли принтер печать изображения в формате JPEG.
Перед использованием escape-функции принтера CHECKJPEGFORMAT вызовите escape-функцию принтера QUERYESCSUPPORT , чтобы определить, поддерживает ли драйвер CHECKJPEGFORMAT. Пример кода, демонстрирующий использование CHECKJPEGFORMAT, см. в разделе Тестирование принтера для поддержки JPEG или PNG.
Escape-функция принтера CHECKPNGFORMAT определяет, поддерживает ли принтер печать изображения в формате PNG.
Перед использованием escape-функции принтера CHECKJPEGFORMAT вызовите escape-функцию принтера QUERYESCSUPPORT , чтобы определить, поддерживает ли драйвер CHECKJPEGFORMAT. Пример кода см. в разделе Тестирование принтера для поддержки JPEG или PNG.
Экранирование принтера DRAWPATTERNRECT создает белый, серый или сплошной черный прямоугольник с использованием шаблонов и правил языка управления страницами (PCL) на принтерах, совместимых Hewlett-Packard LaserJet или LaserJet. Серая шкала — это серый узор, содержащий определенное сочетание черных и белых пикселей.
Приложение должно использовать escape-экранирование QUERYESCSUPPORT , чтобы определить, способен ли принтер рисовать шаблоны и правила, прежде чем использовать escape-экранирование DRAWPATTERNRECT .
- Правила, нарисованные с помощью DRAWPATTERNRECT , не подлежат обрезке областей в контексте устройства.
- Приложения не должны пытаться удалить шаблоны и правила, созданные с помощью DRAWPATTERNRECT , размещая на них непрозрачные объекты.
Если принтер поддерживает правила белого цвета, их можно использовать для удаления шаблонов, созданных с помощью DRAWPATTERNRECT. Если принтер не поддерживает правила белого цвета, нет метода для стирания этих шаблонов.
Если приложение не может использовать escape-экран DRAWPATTERNRECT и устройство является принтером, оно обычно должно использовать функцию PatBlt . Обратите внимание, что если для печати черного прямоугольника используется PatBlt , приложение должно использовать растровый оператор BLACKNESS. Однако если устройство является плоттером, приложение должно использовать функцию Rectangle .
Функция escape-GET_PS_FEATURESETTING принтера извлекает сведения об указанном параметре функции для драйвера PostScript.
Эта escape-функция поддерживается только в том случае, если драйвер PostScript находится в режиме, ориентированном на PostScript, или в режиме, ориентированном на GDI. Чтобы задать режим драйвера PostScript, вызовите функцию escape-POSTSCRIPT_IDENTIFY .
Для выполнения этой операции вызовите функцию ExtEscape со следующими параметрами.
Escape-функция GET_PS_FEATURESETTING принтера действительна при вызове в любое время после вызова функции CreateDC и перед вызовом функции DeleteDC .
Escape-функция принтера GETTECHNOLOGY определяет тип драйвера принтера.
Для принтеров, отличных от XPSDrv, этот escape-файл сообщает, является ли драйвер драйвером Postscript.
Для принтеров XPSDrv этот escape-файл сообщает, является ли драйвер преобразователем документов Microsoft XPS (MXDC). Если это так, escape-экран возвращает строку, завершаемую с нуля , "http://schemas.microsoft.com/xps/2005/06"
Escape-функция принтера PASSTHROUGH отправляет данные непосредственно в драйвер принтера. Для выполнения этой операции вызовите функцию ExtEscape со следующими параметрами.
Escape-функция принтера PASSTHROUGH поддерживается драйверами PostScript в режиме GDI или режиме совместимости, но не в режиме, ориентированном на PostScript. Драйверы в режиме, ориентированном на PostScript, могут использовать функцию escape-POSTSCRIPT_PASSTHROUGH . Чтобы задать режим драйвера PostScript, вызовите escape-функцию POSTSCRIPT_IDENTIFY .
Для данных PASSTHROUGH, отправляемых приложениями, ориентированными на EPSPRINTING или PostScript, драйвер PostScript не вносит никаких изменений. Для данных PASSTHROUGH, отправляемых другими приложениями, если драйвер PostScript использует выходной протокол BCP (binary Communication Protocol) или TBCP (tagged Binary Communication Protocol), драйвер выполняет соответствующую кавыку BCP или TBCP на специальные символы, как описано в разделе "Спецификация протоколов Adobe Serial and Parallel Communications Protocols". Это означает, что приложение должно отправлять данные ASCII или чисто двоичные данные PASSTHROUGH.
Функция escape-POSTSCRIPT_DATA принтера отправляет данные непосредственно в драйвер принтера. Для выполнения этой операции вызовите функцию ExtEscape со следующими параметрами.
Функция POSTSCRIPT_DATA идентична escape-функции PASSTHROUGH , за исключением того, что она поддерживается драйверами PostScript только в режиме совместимости. Он не поддерживается драйверами PostScript в режиме, ориентированном на PostScript, или в режиме, ориентированном на GDI.
Драйверы в режиме, ориентированном на PostScript, могут использовать функцию escape-POSTSCRIPT_PASSTHROUGH , а драйверы в режиме, ориентированном на GDI, могут использовать escape-функцию PASSTHROUGH . Чтобы задать режим драйвера PostScript, вызовите escape-функцию POSTSCRIPT_IDENTIFY .
Функция escape-POSTSCRIPT_IDENTIFY принтера задает драйверу PostScript режим, ориентированный на GDI, или режим, ориентированный на PostScript.
Чтобы поместить драйвер в режим, ориентированный на GDI или PostScript, сначала вызовите escape-функцию принтера QUERYESCSUPPORT , чтобы определить, поддерживает ли драйвер функцию escape-POSTSCRIPT_IDENTIFY принтера. В этом случае можно предположить, что драйвер — PSCRIPT 5.0. Затем перед вызовом любой другой escape-функции принтера необходимо вызвать POSTSCRIPT_IDENTIFY и указать PSIDENT_GDICENTRIC или PSIDENT_PSCENTRIC. Прежде чем вызывать любую другую escape-функцию принтера, необходимо вызвать функции QUERYESCSUPPORT и POSTSCRIPT_IDENTIFY принтера.
Для драйверов PostScript, поддерживающих POSTSCRIPT_PASSTHROUGH, PASSTHROUGH и POSTSCRIPT_PASSTHROUGH функции escape-принтера идентичны.
В режиме, ориентированном на PostScript, приложение отвечает за все выходные данные PostScript, которые помечают бумагу с помощью функции escape POSTSCRIPT_PASSTHROUGH . Функции GDI не допускаются. Драйвер отвечает за общую структуру документа и параметры управления принтером. Приложение может использовать функцию escape-POSTSCRIPT_INJECTION принтера для внедрения блока необработанных данных (включая комментарии DSC) в поток заданий в определенных местах.
Функция escape-POSTSCRIPT_INJECTION принтера вставляет блок необработанных данных в указанную точку в потоке заданий PostScript.
Драйвер PostScript поддерживает эту escape-функцию в режиме, ориентированном на GDI, или в режиме, ориентированном на PostScript, но не в режиме совместимости.
Чтобы задать режим драйвера PostScript, вызовите escape-функцию POSTSCRIPT_IDENTIFY .
Для выполнения этой операции вызовите функцию ExtEscape со следующими параметрами.
Драйвер внутренне кэширует данные внедрения и выдает их в соответствующих точках выходных данных. Кэшированные сведения сбрасываются, когда они больше не нужны. После вызова EndDoc он сбрасывается.
В режиме, ориентированном на GDI, приложение может внедрять только допустимые блочные данные DSC с помощью функции escape-POSTSCRIPT_INJECTION принтера. Допустимый блок DSC должен удовлетворять всем следующим условиям:
- Он состоит из целой последовательности "линий".
- Каждая строка должна начинаться с "%%".
- Каждая строка, за исключением последней, должна заканчиваться <на CR>, <LF> или <CR><LF> , за исключением последней строки. Если последняя строка не заканчивается <на CR>, <LF> или <CR><LF>, драйвер добавляет <CR><LF> после последнего байта данных внедрения.
- Каждая "строка" должна быть не более 255 байт, включая "%%", но не учитывать <завершение строки CR>/<LF> .
Драйвер PostScript поддерживает эту escape-функцию в режиме, ориентированном на PostScript, или в режиме совместимости, но не в режиме, ориентированном на GDI.
Чтобы задать режим драйвера PostScript, вызовите escape-функцию POSTSCRIPT_IDENTIFY .
Escape-функция принтера QUERYESCSUPPORT проверяет реализацию escape-функции принтера.
Функция escape-SPCLPASSTHROUGH2 принтера позволяет приложениям, печатающим на устройствах PostScript с помощью EPSPRINTING, включать частные процедуры PostScript и другие ресурсы на уровне документа в контексте сохранения.
Этот escape-экран поддерживается только для обратной совместимости с Adobe Acrobat. Другие приложения не должны использовать этот устаревший escape-файл.
Приложение должно вызвать этот escape-файл перед вызовом StartDoc , чтобы драйвер кэшировали данные для вставки в правильной точке потока PostScript. Если эта escape-версия поддерживается, драйвер также разрешает экранировать вызовы DOWNLOADFACE до StartDoc. Драйвер внутренне кэширует данные для вставки и данные, необходимые для любых escape-вызовов DOWNLOADFACE до StartDoc , и выдает их все непосредственно перед %%EndProlog. Последовательность вызовов SPCLPASSTHROUGH2 и DOWNLOADFACE сохраняется в порядке, в который передаются их данные, то есть последующий вызов приводит к выводу данных после данных предыдущего вызова. Драйвер будет считать шрифты, загруженные с помощью метода pre-StartDoc escape-вызовов DOWNLOADFACE, недоступными для удаления во время область задания.
Эта escape-ошибка не записывается операционной системой в EMF-файлах, поэтому приложения должны убедиться, что запись EMF отключена для этих заданий с помощью escape-файла.
Примеры
Пример см. в разделе Изменение размера изображения JPEG или PNG.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | wingdi.h (включая Windows.h) |
Библиотека | Gdi32.lib |
DLL | Gdi32.dll |