处理设备管理的图面

重要

新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。

有关详细信息,请参阅新式打印平台打印支持应用设计指南

当 Unidrv 呈现打印页面图像时,它会使用 GDI 管理的绘图图面。 所有图像均以位图呈现。 对于具有无法通过这种方案利用的功能(如绘制矢量的功能)的设备,可以为设备管理的绘图图面提供自定义的驱动程序支持。 要支持设备管理的图面,必须提供能实现以下功能的呈现插件:

在设备管理的图面上绘图时,挂接函数不能回调 GDI 的 Eng 前缀支持服务。 但是,它们可以创建一个临时位图图面,然后将该图面的句柄传递给 Eng 前缀的绘图函数(请参阅呈现打印作业)。

IPrintOemUni::DriverDMS 方法会在每次即将呈现打印作业时被调用,因此呈现插件可以为每个作业指定呈现图面类型(由 GDI 管理或设备管理)。 要根据用户界面中的可选项来选择图面,则还需要提供用户界面插件

在设备管理的图面上绘制文本

呈现插件必须挂接 Unidrv 的 DrvTextOut 函数(以及所有其他图形 DDI 绘图函数)。 为设备管理的图面创建文本涉及以下四个函数之间的交互:

在设备管理的图面上显示文本的步骤如下:

  1. GDI 调用 Unidrv 的 DrvTextOut 函数。

  2. Unidrv 调用呈现插件的 DrvTextOut 挂接函数。

  3. 挂接函数向设备发送指令,以便指定文字的画笔、旋转和剪辑区域。

  4. 挂接函数调用 Unidrv 的 IPrintOemDriverUni::DrvUniTextOut 方法,该方法会使用下载的字体输出文本。 这种方法还能处理基于字形的剪辑。

  5. 如果 IPrintOemDriverUni::DrvUniTextOut 无法使用可下载字体(因为字体不可用或已旋转),则会调用呈现插件的 IPrintOemUni::TextOutAsBitmap 方法,将文本绘制为位图。

  6. IPrintOemDriverUni::DrvUniTextOut 返回后,DrvTextOut 挂接函数必须根据 DrvTextOut 函数的 prclExtra 参数指定的矩形,使用矢量命令(如果支持)绘制下划线和删除线。