绘制文本

文本输出函数仅针对设备托管 (设备位图或图面) ,或者如果驱动程序在 EngAssociateSurface 函数中挂接了调用,则针对 GDI 托管的图面调用文本输出函数。 文本的图形输出基元是函数:

GDI 调用 DrvTextOut ,在文本输出的指定位置呈现一组字形的像素。 许多 DrvTextOut 功能都是使用 DrvEnablePDEV 函数返回的 DEVINFO 结构的 GCAPS 位定义的。

DrvTextOut 的输入参数定义两组像素:前景不透明。 驱动程序呈现图面以提供以下结果:

  1. 首先使用不透明画笔呈现不透明像素。

  2. 然后,使用前景色画笔呈现前景色像素。

每个渲染操作在剪辑区域 执行。 剪辑区域外部的像素不受影响。

驱动程序必须呈现表面,以便首先使用不透明画笔在图面上计算和绘制不透明像素。 然后,使用前景色画笔计算和呈现前景色像素。 每个操作都受剪辑限制。

前景色和不透明像素是一个掩码,通过该掩码,颜色在表面上进行画笔处理。 字体的字形本身没有颜色。 前景色像素集定义为字形像素和用于模拟删除线或下划线的某些额外矩形的像素的并集。 不透明像素由不透明矩形定义。

DrvTextOut 使用指针 pfo 选择指定的字体,以查询当前的 FONTOBJ 结构。 此过程可能包括下载软字体或字体替换,或设备所需的任何其他字体优化。

如果驱动程序具有可缩放的字体,则FONTOBJ_pxoGetXform当前 FONTOBJ 结构调用 FONTOBJ_pxoGetXform 函数,以返回关联字体的概念到设备转换。 这是驱动程序提供的字体所需的。 概念空间是设备字体的设计空间。 例如,PostScript在 1000x1000 单位字符单元格中定义字体。 IFIMETRICS 结构中返回的多数指标都转换为概念空间,这就是需要概念到设备转换的原因。

图形引擎通过调用 函数 DrvGetGlyphMode 来查询驱动程序,以找出它应在内部缓存其字体信息的方法。 它可以将单个字形缓存为位图、轮廓,或者 (为设备字体设置正确的) 。