Обработка управляемых устройствами поверхностей
Внимание
Современная платформа печати — это предпочтительный способ взаимодействия с принтерами Windows. Рекомендуется использовать драйвер класса "Входящие" Microsoft IPP вместе с приложениями поддержки печати (PSA), чтобы настроить возможности печати в Windows 10 и 11 для разработки устройств принтера.
Дополнительные сведения см. в статье "Современная платформа печати" и руководство по проектированию приложений поддержки печати.
Когда Unidrv отрисовывает изображения страницы печати, он использует управляемые GDI поверхности рисования. Все изображения отображаются как растровые изображения. Для устройств с возможностями, которые нельзя использовать в этом сценарии, например возможность рисования векторов, можно предоставить настраиваемую поддержку драйвера для поверхности рисования, управляемой устройством. Для поддержки управляемой устройством поверхности необходимо предоставить подключаемый модуль отрисовки, реализующий следующее:
Набор функций перехвата для всех функций рисования DDI, поддерживаемых Unidrv. Необходимо подключить следующие функции:
DrvAlphaBlend DrvBitBltDrvCopyBitsDrvDitherColorDrvFillPathDrvGradientFillDrvLineToDrvPlgBltDrvRealizeBrushDrvStretchBlt DrvStretchBltDRvStrokeAndFillPathDrvStrokeDrvTextOutDrvTransparentBlt
Метод IPrintOemUni::EnableDriver, который используется для предоставления Unidrv указателями на графические функции перехватчика DDI.
Метод IPrintOemUni::D riverDMS, который сообщает Unidrv, что используется управляемое устройством поверхность, и указывает, какие из определенных функций перехватчика будут использоваться для поверхности.
Функции перехватчика не могут вернуться к службам поддержки GDI с префиксом GDI при рисовании на управляемой устройством поверхности. Однако они могут создать временную растровую поверхность, а затем передать дескриптор этой поверхности в функции рисования с префиксом Eng (см . задание отрисовки печати).
Метод IPrintOemUni::D riverDMS вызывается при каждом отображении задания печати, поэтому подключаемый модуль отрисовки может указать тип поверхности отрисовки (управляемой GDI или управляемой устройством) для каждого задания. Для выбора поверхности в пользовательском интерфейсе требуется также предоставить подключаемый модуль пользовательского интерфейса.
Рисование текста на управляемой устройством поверхности
Подключаемый модуль отрисовки должен перехватывать функцию DrvTextOut Unidrv (наряду со всеми другими функциями рисования DDI графики). Создание текста для управляемой устройством поверхности включает взаимодействие между следующими четырьмя функциями:
Функция DrvTextOut в Unidrv
Функция перехватчика DrvTextOut отрисовки подключаемого модуля отрисовки
Метод IPrintOemDriverUni::D rvUniTextOut в Unidrv
Метод IPrintOemUni::TextOutAsBitmap подключаемого модуля отрисовки
Ниже приведены шаги, связанные с отображением текста на управляемой устройством поверхности.
GDI вызывает функцию DrvTextOut в Unidrv.
Unidrv вызывает функцию перехватчика DrvTextOut модуля отрисовки.
Функция перехватчика отправляет команды на устройство, чтобы указать кисть, поворот и область клипа текста.
Функция перехватчика вызывает метод IPrintOemDriverUni::D rvUniTextOut, который использует скачанные шрифты для вывода текста. Этот метод также обрабатывает вырезку на основе глифов.
Если IPrintOemDriverUni::D rvUniTextOut не может использовать скачиваемый шрифт (так как шрифт недоступен или поворачивается), он вызывает метод модуля отрисовки IPrintOemUni::TextOutAsBitmap, который рисует текст как растровое изображение.
После возврата IPrintOemDriverUni::D rvUniTextOut функция перехватчика DrvTextOut должна нарисовать подчеркивания и удары на основе прямоугольников, указанных параметром prclExtra функции DrvTextOut, используя векторные команды (если это поддерживается).