IFIMETRICS 结构 (winddi.h)

IFIMETRICS 结构定义 GDI 可以使用的给定字面的信息。

语法

typedef struct _IFIMETRICS {
  ULONG   cjThis;
  ULONG   cjIfiExtra;
  PTRDIFF dpwszFamilyName;
  PTRDIFF dpwszStyleName;
  PTRDIFF dpwszFaceName;
  PTRDIFF dpwszUniqueName;
  PTRDIFF dpFontSim;
  LONG    lEmbedId;
  LONG    lItalicAngle;
  LONG    lCharBias;
  PTRDIFF dpCharSets;
  BYTE    jWinCharSet;
  BYTE    jWinPitchAndFamily;
  USHORT  usWinWeight;
  ULONG   flInfo;
  USHORT  fsSelection;
  USHORT  fsType;
  FWORD   fwdUnitsPerEm;
  FWORD   fwdLowestPPEm;
  FWORD   fwdWinAscender;
  FWORD   fwdWinDescender;
  FWORD   fwdMacAscender;
  FWORD   fwdMacDescender;
  FWORD   fwdMacLineGap;
  FWORD   fwdTypoAscender;
  FWORD   fwdTypoDescender;
  FWORD   fwdTypoLineGap;
  FWORD   fwdAveCharWidth;
  FWORD   fwdMaxCharInc;
  FWORD   fwdCapHeight;
  FWORD   fwdXHeight;
  FWORD   fwdSubscriptXSize;
  FWORD   fwdSubscriptYSize;
  FWORD   fwdSubscriptXOffset;
  FWORD   fwdSubscriptYOffset;
  FWORD   fwdSuperscriptXSize;
  FWORD   fwdSuperscriptYSize;
  FWORD   fwdSuperscriptXOffset;
  FWORD   fwdSuperscriptYOffset;
  FWORD   fwdUnderscoreSize;
  FWORD   fwdUnderscorePosition;
  FWORD   fwdStrikeoutSize;
  FWORD   fwdStrikeoutPosition;
  BYTE    chFirstChar;
  BYTE    chLastChar;
  BYTE    chDefaultChar;
  BYTE    chBreakChar;
  WCHAR   wcFirstChar;
  WCHAR   wcLastChar;
  WCHAR   wcDefaultChar;
  WCHAR   wcBreakChar;
  POINTL  ptlBaseline;
  POINTL  ptlAspect;
  POINTL  ptlCaret;
  RECTL   rclFontBox;
  BYTE    achVendId[4];
  ULONG   cKerningPairs;
  ULONG   ulPanoseCulture;
  PANOSE  panose;
  PVOID   Align;
} IFIMETRICS, *PIFIMETRICS;

成员

cjThis

指定此结构的大小(以字节为单位)。 指定的大小包括追加到此结构末尾的任何 Unicode 字符串,以及可选 IFIEXTRA 结构的大小(以字节为单位)。

cjIfiExtra

指定此 IFIMETRICS 结构后面的 IFIEXTRA 结构的大小(以字节为单位)。 值为零表示不存在 IFIEXTRA 结构。

dpwszFamilyName

指定以字节为单位的空终止 Unicode 字符串的偏移量,该字符串包含字体 (的系列名称,例如“Times Roman”) 。 通常,此字符串紧跟 IFIMETRICS 结构。 此字符串应与 Win32 LOGFONT 结构的 lfFaceName 成员中记录的名称相同。

dpwszStyleName

指定以字节为单位的空终止 Unicode 字符串的偏移量,该字符串描述字体 (的样式,例如“Bold”) 。

dpwszFaceName

指定以字节为单位的空终止 Unicode 字符串的偏移量,该字符串表示字体的唯一和完整名称。 该名称包含字体 (的系列和子名称,例如“Times New Roman Bold”) 。

dpwszUniqueName

指定 null 终止的 Unicode 字符串的偏移量(以字节为单位)表示字体的唯一标识符 (,例如“Monotype:Times New Roman:1990”) 。

dpFontSim

指定此 IFIMETRICS 结构的开头到用于描述字体支持的模拟的 FONTSIM 结构的偏移量(以字节为单位)。 仅当字体支持加粗、斜体或粗体斜体模拟时,驱动程序才应将此成员设置为非零值;否则,驱动程序应将此设置为零。

请注意,如果字体设计为斜体,驱动程序不应指示斜体模拟的字体支持,尽管它可以指示对粗斜体模拟的字体支持。 同样,如果字体设计为粗体,驱动程序不应指示对粗体模拟的字体支持,但可以指示对粗体斜体模拟的字体支持。 如果字体是粗体和斜体设计,则它不应支持任何模拟。

FONTSIM 结构中的偏移量相对于 FONTSIM 结构的基数。

lEmbedId

指定字体的嵌入 ID。 此值特定于 TrueType,应由所有其他字体提供程序设置为零。

lItalicAngle

指定字体的斜体角度。 此值特定于 TrueType,应由所有其他字体提供程序设置为零。

lCharBias

指定字符偏差。 此值特定于 TrueType,应由所有其他字体提供程序设置为零。

dpCharSets

指定此 IFIMETRICS 结构的开头到包含此字体支持的所有 Windows 字符集列表的数组的偏移量。 数组的大小为 16 字节,并且始终以DEFAULT_CHARSET终止。 数组的第一个值应标识字体中具有最佳且最完整的覆盖率的 Windows 字符集;此值还应存储在 jWinCharSet 中。 例如,如果这是还支持 US ANSI 和西里尔字符集的日语字体,则应将 jWinCharSet 设置为SHIFTJIS_CHARSET, dpCharSet 标识的数组将包含 SHIFTJIS_CHARSET、ANSI_CHARSET、RUSSIAN_CHARSET、DEFAULT_CHARSET。

如果此字体不支持多个 Windows 字符集,则 dpCharSets 应设置为零。

jWinCharSet

标识此字体最受支持的字符集。 如果字体仅支持单个 Windows 字符集,驱动程序应将相应的值存储在 jWinCharSet 中。 驱动程序不应在此字段中存储DEFAULT_CHARSET。 此成员可以是以下值之一:

Value 含义
ANSI_CHARSET 此字体支持 Windows ANSI 字符集。
ARABIC_CHARSET 此字体支持阿拉伯文字符集。
BALTIC_CHARSET 此字体支持波罗的海字符集。
CHINESEBIG5_CHARSET 此字体支持繁体中文 (大 5) 字符集。
EASTEUROPE_CHARSET 此字体支持东欧字符集。
GB2312_CHARSET 此字体支持简化 (中国) 中文字符集。
GREEK_CHARSET 此字体支持希腊字符集。
HANGEUL_CHARSET 此字体支持朝鲜语 (朝鲜语) 字符集。
HEBREW_CHARSET 此字体支持希伯来语字符集。
JOHAB_CHARSET 此字体支持朝鲜语 (Johab) 字符集。
OEM_CHARSET 此字体支持特定于 OEM 的字符集。 OEM 字符集依赖于系统。
SHIFTJIS_CHARSET 此字体支持 Shift-JIS (日语行业标准) 字符集。
SYMBOL_CHARSET 此字体支持 Windows 符号字符集。
RUSSIAN_CHARSET 此字体支持西里尔文字符集。
THAI_CHARSET 此字体支持泰文字符集。
TURKISH_CHARSET 此字体支持土耳其字符集。
VIETNAMESE_CHARSET 此字体支持越南字符集。

jWinPitchAndFamily

指定字体的间距。 两个低序位指定字体的间距,可以是下列值之一:

Value 含义
FIXED_PITCH 对于固定音调字体
VARIABLE_PITCH 对于可变音调字体
 

此成员的位 4 到 7 位指定字体系列,可以是以下值之一:

Value 含义
FF_DECORATIVE 新式字体,如旧英语。
FF_DONTCARE 不要关心或未知。
FF_MODERN 具有固定笔划宽度的字体 (固定间距) ,带有或不使用 serif。 固定间距字体通常为现代字体,例如 Pica、Elite 和 Courier。
FF_ROMAN 具有可变笔划宽度的字体 (按比例间距) ,以及泰晤士罗马、帕拉蒂诺和世纪学校手册等。
FF_SCRIPT 设计为类似于手写的字体,如脚本和卷曲。
FF_SWISS 具有可变笔划宽度的字体 (按比例间距) ,且没有 serif,如 Helvetica 和瑞士。

usWinWeight

指定范围 0 到 1000 (中的字体粗细,例如,400 是正常的,700 是粗体) 。 此值提供给 Win32 LOGFONT 结构的 lfWeight 成员中的应用程序。

flInfo

指定有关字体的其他信息。 此字段可以是以下标志值的组合:

FM_INFO_1BPP

指示字形位图具有每像素一位的颜色深度。 对于 Windows NT 3.1,Windows NT的第一个版本,必须设置此标志。

FM_INFO_4BPP

指示字形位图的颜色深度为每像素四位。 如果字体支持具有 16 个灰色级别的抗锯齿字形位图,驱动程序应设置此设置。

FM_INFO_8BPP

指示字形位图的颜色深度为每像素 8 位。 GDI 的当前版本将忽略此设置,因为它不支持颜色字体。

FM_INFO_16BPP

指示字形位图每像素的颜色深度为 16 位。 GDI 的当前版本将忽略此设置,因为它不支持颜色字体。

FM_INFO_24BPP

指示字形位图每像素的颜色深度为 24 位。 GDI 的当前版本将忽略此设置,因为它不支持颜色字体。

FM_INFO_32BPP

指示字形位图每像素的颜色深度为 32 位。 GDI 的当前版本将忽略此设置,因为它不支持颜色字体。

FM_INFO_90DEGREE_ROTATIONS

指示可以在原始规范形状的 90 度旋转中实现字体。 GDI 通过添加在创建字体时传递给驱动程序的设备转换中的旋转来请求字体的旋转。 仅当尚未设置FM_INFO_ARB_XFORMS标志时,此成员才有意义。

FM_INFO_ANISOTROPIC_SCALING_ONLY

指示字体仅支持任意异性缩放。 也就是说,转换等效于对角矩阵乘以正实数。 如果设置了此标志,则无法设置FM_INFO_ARB_XFORMS和FM_INFO_ISOTROPIC_SCALING_ONLY标志。 如果还设置了FM_INFO_90DEGREE_ROTATIONS标志,则字体支持转换,这些转换是简单异性缩放的组合,后跟旋转 90 度。

FM_INFO_ARB_XFORMS

指示可以在连续的二维线性转换范围内实现字体。

FM_INFO_CONSTANT_WIDTH

指示所有实现下字体的所有字形具有相同的字符增量值。 如果设置了此标志,还必须设置FM_INFO_OPTICALLY_FIXED_PITCH标志。

FM_INFO_DBCS_FIXED_PITCH

指示此字体的双字节字符是固定的音调。 对于单个字节字符,不隐含任何内容。 此标志仅适用于支持双字节字符集 (DBCS) (例如 shift JIS)的字体。 不支持 DBCS 的字体不应设置此标志。

FM_INFO_DO_NOT_ENUMERATE

指示 Win32 EnumFontFamiliesEx、EnumFontFamilies 或EnumFonts 例程不会枚举此字体。 此外,将从字符串 dpwszUniqueName 检索返回到 Win32 应用程序调用 GetTextFace 的字符串。 此标志允许字体提供程序将多个 IFIMETRICS 结构与其字体之一相关联。

FM_INFO_DSIG

指示字体符合 Unicode 标准。

FM_INFO_FAMILY_EQUIV

指示 IFIMETRICS 中的 dpwszFamilyName 偏移实际上是等效的姓氏或别名列表的偏移量。 名字是基本名称或实名;后续名称是等效名称或别名。 列表中的每个名称都以 null 结尾;列表由两个零终止。

<基名称><0<>别名 1><0>...<alias n>
<0><0>

基于的名称仅用于映射;它们未枚举。

FM_INFO_IGNORE_TC_RA_ABLE

指示对于此字体,将忽略TC_RA_ABLE标志。

FM_INFO_INTEGER_WIDTH

指示所有字形都具有非频率前进宽度。 位图字体通常设置此标志。

FM_INFO_INTEGRAL_SCALING

指示字体可以按 x 方向和 y 方向的整数量进行缩放。 如果设置了此标志,则驱动程序必须能够在按 x 和 y 方向的整数量缩放设备标志符号的情况下呈现标志符号。 GDI 通过添加在创建字体时传递给驱动程序的设备转换中的缩放比例来请求字体的整型缩放。 仅当尚未设置FM_INFO_ARB_XFORMS标志时,此标志才有意义。

FM_INFO_ISOTROPIC_SCALING_ONLY

指示字体仅支持任意异性缩放。 也就是说,转换等效于标识矩阵乘以正实数。 如果设置了此标志,则既不能设置FM_INFO_ARB_XFORMS,也不能设置FM_INFO_ANISOTROPIC_SCALING_ONLY标志。 如果设置了FM_INFO_90DEGREE_ROTATIONS标志,则字体支持等效于异性缩放的转换,后跟旋转 90 度。

FM_INFO_OPTICALLY_FIXED_PITCH

指示此字体在版式上被视为固定音调。 这是字体的光学质量,不一定指示字体的所有字形具有相同的字符增量。

FM_INFO_NONNEGATIVE_AC

指示此字体的所有字形都具有非负 ac 间距。 也就是说,字形黑匣子从不扩展到以字符原点和字符串联点边框的区域之外。

FM_INFO_NOT_CONTIGUOUS

指示支持的字符集不是连续的。

FM_INFO_RETURNS_BITMAPS

指示字体包含有效的数字签名。

FM_INFO_RETURNS_OUTLINES

指示对于驱动程序支持的任何字形,GDI 可以请求描述该字形轮廓的 PATHOBJ 结构。 如果可能,使用 GDI 的路径填充约定填充大纲时,生成的位图应与驱动程序返回的位图相同。 不能同时设置FM_INFO_RETURNS_OUTLINES和FM_INFO_RETURNS_STOKES标志。

FM_INFO_RETURNS_STROKES

指示对于驱动程序支持的任何字形,GDI 可以请求描述字形的样条的 PATHOBJ 结构。 无法填充此路径,但可以进行笔划,以便提供字形的表示形式。 不能同时设置FM_INFO_RETURNS_OUTLINES和FM_INFO_RETURNS_STOKES标志。

FM_INFO_RIGHT_HANDED

指示字体的上升方向从基线方向逆时针方向 90 度。 上升方向是测量高度的方向,并且始终与基线方向垂直。

FM_INFO_TECH_BITMAP

指示字体是位图字体。

FM_INFO_TECH_CFF

指示字体是包含压缩字体格式的 Pscript OpenType 字体, (CFF) 表。

FM_INFO_TECH_MM

指示这是多主控形状 (MM) 字体。

FM_INFO_TECH_OUTLINE_NOT_TRUETYPE

指示字体基于使用大纲路径的可缩放字体技术,但不基于 TrueType。 此标志不指定是否应填充或笔划此字体返回的路径;使用者应检查此信息的FM_INFO_RETURNS_STROKES和FM_INFO_RETURNS_OUTLINES标志。

FM_INFO_TECH_STROKE

指示字体基于笔划字体技术。 此标志不指定是否应填充或笔划此字体返回的路径;使用者应检查此信息的FM_INFO_RETURNS_STROKES和FM_INFO_RETURNS_OUTLINES标志。

FM_INFO_TECH_TRUETYPE

指示字体为 TrueType 字体。

FM_INFO_TECH_TYPE1

指示此字体是 PostScript 屏幕字体, (Type1 或 OpenType PostScript) 。

fsSelection

指定以下标志的组合:

Value 含义
FM_SEL_BOLD 如果字体的字符为粗体,则设置。
FM_SEL_ITALIC 设置字体的字符是否为斜体。
FM_SEL_NEGATIVE 设置字体的字符是否具有前景色和背景。
FM_SEL_OUTLINED 如果字体的字符为空心,则设置。
FM_SEL_REGULAR 设置字体的字符是否为普通粗细。
FM_SEL_STRIKEOUT 如果默认删除字体的字符,则设置;否则必须模拟罢工。
FM_SEL_UNDERSCORE 如果字体的所有字符默认下划线,则设置;否则必须模拟不足。

fsType

这是一个特定于 TrueType 的位字段,指示字体的某些属性,例如字体嵌入和字体许可权限。 可嵌入字体可以存储在文档中。 在未 (远程系统) 安装字体的系统上打开具有嵌入字体的文档时,嵌入字体可以加载为临时 (,在某些情况下,嵌入的字体可通过嵌入感知应用程序在该系统上永久) 使用。 嵌入许可权限由字体供应商授予。 可以设置以下标志:

Value 含义
FM_EDITABLE_EMBED 设置字体是否可以嵌入并暂时加载在其他系统上。 可以打开包含可编辑字体的文档进行阅读和写入。
FM_READONLY_EMBED 如果不允许读/写嵌入,则设置;仅允许“预览和打印”封装。 设置此位后,字体可以嵌入并暂时加载到远程系统上。 必须打开包含“预览和打印”字体的文档“只读;”不能对文档应用任何编辑。
FM_TYPE_LICENSED
FM_NO_EMBEDDING
设置字体是否为受限许可证字体。 仅设置此位时, 不得以任何方式修改、嵌入或交换 此字体,而无需首先获得法定所有者的权限。 要使受限许可证嵌入生效,它必须是所选唯一的嵌入级别。
 

具有FM_READONLY_EMBED位集的字体表示它们可以嵌入到文档中,但只能 暂时 安装在远程系统上。 任何包含FM_READONLY_EMBED字体的文档都必须打开“只读”。也就是说,应用程序可以让用户查看和/或打印文档,但不能对其进行编辑。

具有FM_EDITABLE_EMBED位集的字体表示它们可以嵌入到文档中,但只能 暂时 安装在远程系统上。 与FM_READONLY_EMBED字体相比,可以打开包含可编辑字体的文档“读/写;”编辑是允许的,并且可以保存更改。

未设置 fsType 位的字体指示应用程序可以在远程系统上嵌入和永久安装它们。 远程系统的用户获得该字体作为字体的原始购买者相同的权利、义务和许可证,并且受与原始购买者相同的最终用户许可协议、版权、设计专利和/或商标。

通过字体嵌入 DLL 或其他方式实现对字体嵌入的支持的应用程序不得嵌入未获得嵌入许可的字体。 此外,加载嵌入字体以供临时使用的应用程序 必须在 包含嵌入字体的文档关闭时删除字体。

如果设置了多个嵌入位,则授予 的最小 限制性许可证优先。 例如,如果设置了位 1 和 3,则位 3 优先于位 1,并且字体可嵌入可编辑权限。 出于兼容性目的,大多数授予可编辑嵌入权限的供应商也会设置预览 & 打印位 (0x000C) 。 这允许仅支持预览 & 打印嵌入以检测允许字体嵌入的应用程序。

fwdUnitsPerEm

指定字体的 em 高度。

fwdLowestPPEm

指定字体的最小可读大小(以像素为单位)。 位图字体忽略此值。

fwdWinAscender

指定字体的 Windows 升序值。

fwdWinDescender

指定字体的 Windows 降序值。

fwdMacAscender

指定字体的 Macintosh 升序值。

fwdMacDescender

指定字体的 Macintosh 降序值。 此数字通常小于零。 它测量 Macintosh 字符集中最低降序底线的带符号偏移量。

fwdMacLineGap

指定字体的 Macintosh 行间距。 建议的 Macintosh 内联间距等于 fwdMacLineGap + fwdMacAscenderfwdMacDescender

fwdTypoAscender

指定字体的版式升序值。

fwdTypoDescender

指定字体的版式后代值。 此值指定基线中最低降序的有符号偏移量。

fwdTypoLineGap

指定字体的版式线条间距。

fwdAveCharWidth

指定拉丁字母和空格字符的所有 26 个小写字母“a”到“z”的宽度的算术平均值。 如果不存在任何 26 个小写字母,则应将此成员设置为字体中所有字形的加权平均值。

fwdMaxCharInc

指定字体中所有字形的最大字符增量。

fwdCapHeight

指定在 FUnits) (字体单元中描述大写“H”顶部的光学线的高度。 这可能与大写“H”的测量高度不同。 如果此信息不存在,则应将 fwdCapHeight 设置为零,指示它未定义。

fwdXHeight

指定以字体单位表示小写“x”高度的光学线的高度。 这可能与小写“x”的测量高度不同。 值为零表示此成员未定义。

fwdSubscriptXSize

指定建议的字符宽度 (下标字体) 基线方向的大小。

fwdSubscriptYSize

指定建议的字符高度 (下标字体的升序方向) 的大小。

fwdSubscriptXOffset

指定下标字符基线方向的建议偏移量。 偏移量与基字符的字符原点有关。

fwdSubscriptYOffset

指定下标字符基线方向的建议偏移量。 偏移量取自基字符的字符原点。

fwdSuperscriptXSize

指定建议的字符宽度 (上标字体) 基线方向的大小。

fwdSuperscriptYSize

指定建议的字符高度 (上标字体的升序方向) 的大小。

fwdSuperscriptXOffset

指定上标字符基线方向的建议偏移量。 偏移量取自基字符的字符原点。

fwdSuperscriptYOffset

指定上标字符基线方向的建议偏移量。 偏移量取自基字符的字符原点。

fwdUnderscoreSize

以字体单位指定下划线条的建议宽度。

fwdUnderscorePosition

指定从下划线条的底线到下划线中间的建议偏移量(以字体单位为单位)。

fwdStrikeoutSize

以字体坐标指定出线条的建议宽度。

fwdStrikeoutPosition

指定基线中罢工条中间的建议偏移量。

chFirstChar

指定 jWinCharSet 中指定的代码页中支持的最低字符。 此字段用于 Windows 3.1 兼容性。

chLastChar

指定 jWinCharSet 中指定的代码页中支持的最高字符。 此字段用于 Windows 3.1 兼容性。

chDefaultChar

指定 jWinCharSet 中指定的代码页中的默认字符。 此字段用于 Windows 3.1 兼容性。

chBreakChar

指定 jWinCharSet 中指定的代码页中的断字符。 此字段用于 Windows 3.1 兼容性。

wcFirstChar

使用最小的 Unicode 字符代码指定支持的字符。

wcLastChar

指定支持的最大 Unicode 字符代码。

wcDefaultChar

指定应用程序请求字体不支持的字符时要替换的字符。

wcBreakChar

指定空格字符或其等效项的代码点。

ptlBaseline

指定包含此字体的预期书写方向的 POINTL 结构。 例如,典型的拉丁字体指定值 (1,0) 。

ptlAspect

指定一个 POINTL 结构,该结构包含设计位图字体的像素中心纵横比。 此值仅由位图字体使用。

ptlCaret

指定包含字体升序方向的 POINTL 结构。 例如,非数字拉丁字体的值 (0,1) ,而斜体拉丁字体可能指定 (2,5) 的值。

rclFontBox

指定一个 RECTL 结构,该结构描述设计空间中字体中所有字形的边界框。

achVendId[4]

指定字体供应商的四个字符标识符。 标识符记录在 Microsoft TrueType 规范中。

cKerningPairs

指定与此字体关联的字距对数。

ulPanoseCulture

指定解释平移号的方式。 对于基于拉丁文的字体,应将此数字设置为FM_PANOSE_CULTURE_LATIN。 有关 PANOSE 结构的信息,请参阅 Microsoft Window SDK 文档。

panose

一个由 10 个字节表示的数组,用于描述给定字面的视觉特征。 然后,这些特征用于将字体与其他外观相似且具有不同名称的字体相关联。 有关 PANOSE 结构的信息,请参阅 Window SDK 文档。

Align

仅当定义_WIN64常量时,才定义此成员。 其唯一目的是确保此结构在 Itanium 体系结构下正确对齐。

注解

可以在 IFIEXTRA 结构中选择性地指定字形的其他信息。

驱动程序的 DrvQueryFont 例程将填充,并将 IFIMETRICS 结构返回到 GDI。

IFIMETRICS 结构定义 GDI 理解的字面的所有信息。 大多数成员都是 FWORD 值,这些值在设计空间中是有符号的 16 位数量。 如果字体是光栅字体,则设计空间和设备空间相同,并且字体单元等效于像素之间的距离。

字体/表示空间中的坐标系统使 y 坐标在向上方向增加,x 坐标向右增加。

IFIMETRICS 结构的 Align 成员使 x64 计算机大于 x32 计算机,该计算机对按此结构格式化的二进制字体格式文件具有影响。 从 Windows Server 2003 SP1 开始,已将其他固定大小结构添加到 Prntfont.h: PRINTIFI32。 PRINTIFI32 结构与 IFIMETRICS 结构相同,只不过它不包含 Align 成员。

要求

   
标头 winddi.h (包括 Winddi.h)

请参阅

DrvQueryFont

IFIEXTRA

PATHOBJ