Функция 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-функция, определяемая приложением.

Значение Значение
CHECKJPEGFORMAT
Проверяет, поддерживает ли принтер изображение JPEG.
CHECKPNGFORMAT
Проверяет, поддерживает ли принтер изображение PNG.
DRAWPATTERNRECT
Рисует белый, серый или черный прямоугольник.
GET_PS_FEATURESETTING
Возвращает сведения об указанном параметре функции для драйвера PostScript.
GETTECHNOLOGY
Сообщает о том, является ли драйвер драйвером Postscript.
ПРОХОЖДЕНИЯ
Позволяет приложению отправлять данные непосредственно на принтер. Поддерживается в режиме совместимости и режиме, ориентированном на GDI.
POSTSCRIPT_DATA
Позволяет приложению отправлять данные непосредственно на принтер. Поддерживается только в режиме совместимости.
POSTSCRIPT_IDENTIFY
Задает для драйвера PostScript режим, ориентированный на GDI или PostScript.
POSTSCRIPT_INJECTION
Вставляет блок необработанных данных в поток заданий PostScript.
POSTSCRIPT_PASSTHROUGH
Отправляет данные непосредственно в драйвер принтера PostScript. Поддерживается в режиме совместимости и режиме, ориентированном на PostScript.
QUERYESCSUPPORT
Определяет, реализуется ли определенный escape-файл драйвером устройства.
SPCLPASSTHROUGH2
Позволяет приложениям включать частные процедуры и другие ресурсы в контексте сохранения на уровне документа.

[in] cjInput

Количество байтов данных, на которые указывает параметр lpszInData .

[in] lpInData

Указатель на входную структуру, необходимую для указанного escape-файла. См. также примечания.

[in] cjOutput

Количество байтов данных, на которые указывает параметр lpszOutData .

[out] lpOutData

Указатель на структуру, которая получает выходные данные из этого escape-файла. Этот параметр не должен иметь значение NULL , если extEscape вызывается как функция запроса. Если данные не должны возвращаться в этой структуре, задайте для параметра cbOutput значение 0. См. также примечания.

Возвращаемое значение

Возвращаемое значение указывает результат функции. Значение больше нуля, если функция выполнена успешно, за исключением escape-экранирования принтера QUERYESCSUPPORT, который проверяет только реализацию. Возвращаемое значение равно нулю, если escape-файл не реализован. Возвращаемое значение меньше нуля указывает на ошибку.

Комментарии

Примечание Это блокирующая или синхронная функция, возвращаемая не сразу. Скорость возврата этой функции зависит от факторов времени выполнения, таких как состояние сети, конфигурация сервера печати и реализация драйвера принтера, которые трудно предсказать при написании приложения. Вызов этой функции из потока, который управляет взаимодействием с пользовательским интерфейсом, может привести к тому, что приложение не отвечает.
 
Используйте эту функцию для передачи определенного драйвером 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 будет настроен в режиме, ориентированном на GDI или PostScript, вы больше не сможете вызывать функцию escape-POSTSCRIPT_IDENTIFY принтера.
 
Если функция escape-POSTSCRIPT_IDENTIFY принтера не используется, драйвер PostScript находится в режиме совместимости и обеспечивает идентичную поддержку функций экранирования принтера PASSTHROUGH, POSTSCRIPT_PASSTHROUGH и POSTSCRIPT_DATA принтера.

Для драйверов 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> .
Функция escape-POSTSCRIPT_PASSTHROUGH принтера отправляет данные непосредственно в драйвер принтера PostScript.

Драйвер 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

См. также раздел

ESCAPE

GetDeviceCaps

Функции API очереди печати принтера

Вывод на печать