STROBJ_bEnumPositionsOnly 函数 (winddi.h)

STROBJ_bEnumPositionsOnly 函数枚举指定文本字符串的字形标识和位置,但不创建缓存的字形位图。

语法

ENGAPI BOOL STROBJ_bEnumPositionsOnly(
  STROBJ    *pstro,
  ULONG     *pc,
  PGLYPHPOS *ppgpos
);

参数

pstro

调用方提供的指向描述文本字符串的 STROBJ 结构的指针。 这通常是驱动程序的 DrvTextOut 函数接收的 STROBJ 结构。

pc

调用方提供的地址,用于接收 由 ppgpos 中的指针指向的 GDI 提供的 GLYPHPOS 结构数。

ppgpos

调用方提供的地址,接收指向 GLYPHPOS 结构数组的 GDI 提供的指针。 (请参阅以下 备注 部分。)

返回值

如果仍要枚举更多字形,则返回值为 TRUE ;如果枚举完成,则返回值为 FALSE 。 如果无法枚举字形并记录错误代码,则返回值DDI_ERROR。

注解

STROBJ_bEnumPositionsOnly函数通常从驱动程序的 DrvTextOut 函数中调用。 它执行与 STROBJ_bEnum 相同的操作,但有一个重要异常 • GDI 不会创建字形的缓存位图。 STROBJ_bEnum 函数假定驱动程序最终需要这些位图。 但是,许多较新的打印机都包含内部光栅器,因此不需要 GDI 来呈现字形。 对于此类打印机,消除服务器内存中字形位图的自动呈现和缓存,可大大节省处理时间和内存分配。

对于支持内部字形光栅化的打印机,应遵循以下规则:

  • 驱动程序应在其 DEVINFO 结构中设置GCAPS_FONT_RASTERIZER标志。
  • 驱动程序的 DrvTextOut 函数应调用 STROBJ_bEnumPositionsOnly 而不是 STROBJ_bEnum
  • 如果打印作业包含设备无法在内部光栅化的字体,则驱动程序应调用 FONTOBJ_cGetGlyphs 以获取字形位图。
  • 如果驱动程序需要在文本字符串打印后确定可能打印机的位置,但不需要字体字形,则可以调用 STROBJ_bGetAdvanceWidths
由于 GDI 不会创建标志符号的缓存位图,因此每个返回的 GLYPHPOS 结构中的 GLYPHDEF 联合的内容将为 NULL

要求

要求
最低受支持的客户端 适用于 Windows 2000 及更高版本的 Windows 操作系统。
目标平台 通用
标头 winddi.h (包括 Winddi.h)
Library Win32k.lib
DLL Win32k.sys

另请参阅

DrvTextOut

FONTOBJ_cGetGlyphs

GLYPHDEF

GLYPHPOS

STROBJ

STROBJ_bEnum

STROBJ_bGetAdvanceWidths