字体规格函数
当驱动程序必须支持字体时,它必须通过 IFIMETRICS 结构向 GDI 提供字体信息。 每个字体都有单独的 IFIMETRICS 结构。 大多数字段在设计空间中以 FWORD 表示,每个字段都是有符号的 16 位数量。 如果字体是光栅字体,则设计空间和设备空间相同,字体单位相当于像素之间的距离。
基本上,IFIMETRICS 结构是文本指标结构的图形 DDI 版本。 所有距离都指字体设计器的名义坐标系。 名义空间坐标系是右手笛卡尔坐标系,其中 y 坐标朝顶部增加,x 坐标向右增大。
IFIMETRICS 结构设计为长度可变。 与字体关联的字符串的长度没有限制。 常见的做法是紧跟在 IFIMETRICS 结构的最后一个字段之后存储字符串。
提供字体的任何驱动程序都必须支持 DrvQueryFont 函数。 驱动程序还可以包含 函数 DrvQueryFontData 来检索有关已实现字体的信息。 在调用 DrvQueryFontData 时,GDI 提供指向字形或字距调整句柄数组的指针。 驱动程序返回有关 GDI GLYPHDATA 结构中关联字形的信息。 如果 DrvQueryFontData 已获得字距调整句柄,它将以 Win32 POINTL 结构的形式返回有关字距调整对的信息。 下表列出了字体指标函数。
函数 | 说明 |
---|---|
通知驱动程序不再需要字体实现,以便驱动程序可以释放它分配的任何数据结构。 GDI 为字体生成者调用此函数一次,为字体使用者调用此函数一次。 仅当驱动程序必须释放分配的资源时,才应支持可选。 |
|
通知驱动程序不再需要指示的数据结构。 仅当驱动程序的内存管理需要此信息时,才应实现可选。 |
|
返回指向字体的 IFIMETRICS 结构的指针。 所有处理字体的驱动程序都需要。 |
|
返回有关已实现字体的信息。 所有处理字体的驱动程序) 所选 iMode 值的必需 (。 |
|
返回指向结构的指针,这些结构定义从 Unicode 到字形句柄的映射或字距调整对到字距调整句柄的映射。 所有处理字体的驱动程序都需要。 |
函数 DrvQueryFontTree 允许 GDI 获取指向树结构的指针,这些树结构定义以下项之一:
从 Unicode 到字形句柄的映射,包括字形变体 (GDI FD_GLYPHSET 结构)
将字距调整对映射到字距调整句柄 (FD_KERNINGPAIR 结构)
DrvQueryFontTree 需要努力生成所需的结构,因此驱动程序应尽可能预计算这些文件。 结构可以存储在资源或文件中。 如果结构存储在文件中,则加载或读取结构的理想方法是调用 EngMapFontFile 函数,该函数将文件映射到内存。 由于文件不会添加到交换文件中,因此可以根据需要提供内存,这比在文件中打开和读取更高效。
具体而言,驱动程序在 pid 参数中返回标识符。 当不再需要FD_GLYPHSET结构或FD_KERNINGPAIR结构数组时,GDI 会通过返回的指针将其传递给 DrvFree 函数。 根据在驱动程序中管理内存的方式, pid 可以识别结构、如何分配结构,或者根本不执行任何操作。
DrvFree 和 DrvDestroyFont 都是可选函数。 GDI 调用 DrvFree 以通知驱动程序不再需要指定的数据结构。 驱动程序不需要实现它,除非它为结构分配内存,并且需要通知何时可以释放相应的数据结构。 例如,如果数据与 FONTOBJ 结构相关联,则删除操作可能会延迟到调用 DrvDestroyFont,因此无需实现 DrvFree。
DrvDestroyFont 通知驱动程序不再需要字体实现,以便驱动程序可以释放它分配的任何数据结构。 GDI 为字体生成者调用此函数一次,为字体使用者调用此函数一次。 仅当驱动程序在销毁字体实例时必须释放分配的资源时,才应实现它。