字体规格函数

当驱动程序必须支持字体时,它必须通过 IFIMETRICS 结构向 GDI 提供字体信息。 每个字体都有单独的 IFIMETRICS 结构。 大多数字段在设计空间中以 FWORD 表示,每个字段都是有符号的 16 位数量。 如果字体是光栅字体,则设计空间和设备空间相同,字体单位相当于像素之间的距离。

基本上,IFIMETRICS 结构是文本指标结构的图形 DDI 版本。 所有距离都指字体设计器的名义坐标系。 名义空间坐标系是右手笛卡尔坐标系,其中 y 坐标朝顶部增加,x 坐标向右增大。

IFIMETRICS 结构设计为长度可变。 与字体关联的字符串的长度没有限制。 常见的做法是紧跟在 IFIMETRICS 结构的最后一个字段之后存储字符串。

提供字体的任何驱动程序都必须支持 DrvQueryFont 函数。 驱动程序还可以包含 函数 DrvQueryFontData 来检索有关已实现字体的信息。 在调用 DrvQueryFontData 时,GDI 提供指向字形或字距调整句柄数组的指针。 驱动程序返回有关 GDI GLYPHDATA 结构中关联字形的信息。 如果 DrvQueryFontData 已获得字距调整句柄,它将以 Win32 POINTL 结构的形式返回有关字距调整对的信息。 下表列出了字体指标函数。

函数 说明

DrvDestroyFont

通知驱动程序不再需要字体实现,以便驱动程序可以释放它分配的任何数据结构。 GDI 为字体生成者调用此函数一次,为字体使用者调用此函数一次。 仅当驱动程序必须释放分配的资源时,才应支持可选。

DrvFree

通知驱动程序不再需要指示的数据结构。 仅当驱动程序的内存管理需要此信息时,才应实现可选。

DrvQueryFont

返回指向字体的 IFIMETRICS 结构的指针。 所有处理字体的驱动程序都需要。

DrvQueryFontData

返回有关已实现字体的信息。 所有处理字体的驱动程序) 所选 iMode 值的必需 (。

DrvQueryFontTree

返回指向结构的指针,这些结构定义从 Unicode 到字形句柄的映射或字距调整对到字距调整句柄的映射。 所有处理字体的驱动程序都需要。

函数 DrvQueryFontTree 允许 GDI 获取指向树结构的指针,这些树结构定义以下项之一:

  • 从 Unicode 到字形句柄的映射,包括字形变体 (GDI FD_GLYPHSET 结构)

  • 将字距调整对映射到字距调整句柄 (FD_KERNINGPAIR 结构)

DrvQueryFontTree 需要努力生成所需的结构,因此驱动程序应尽可能预计算这些文件。 结构可以存储在资源或文件中。 如果结构存储在文件中,则加载或读取结构的理想方法是调用 EngMapFontFile 函数,该函数将文件映射到内存。 由于文件不会添加到交换文件中,因此可以根据需要提供内存,这比在文件中打开和读取更高效。

具体而言,驱动程序在 pid 参数中返回标识符。 当不再需要FD_GLYPHSET结构或FD_KERNINGPAIR结构数组时,GDI 会通过返回的指针将其传递给 DrvFree 函数。 根据在驱动程序中管理内存的方式, pid 可以识别结构、如何分配结构,或者根本不执行任何操作。

DrvFreeDrvDestroyFont 都是可选函数。 GDI 调用 DrvFree 以通知驱动程序不再需要指定的数据结构。 驱动程序不需要实现它,除非它为结构分配内存,并且需要通知何时可以释放相应的数据结构。 例如,如果数据与 FONTOBJ 结构相关联,则删除操作可能会延迟到调用 DrvDestroyFont,因此无需实现 DrvFree

DrvDestroyFont 通知驱动程序不再需要字体实现,以便驱动程序可以释放它分配的任何数据结构。 GDI 为字体生成者调用此函数一次,为字体使用者调用此函数一次。 仅当驱动程序在销毁字体实例时必须释放分配的资源时,才应实现它。