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

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

dpwszStyleName

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

dpwszFaceName

指定以 null 结尾的 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,dpCharSets 标识的数组将包含SHIFTJIS_CHARSET、ANSI_CHARSET、RUSSIAN_CHARSET、DEFAULT_CHARSET。

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

jWinCharSet

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

含义
ANSI_CHARSET 此字体支持 Windows ANSI 字符集。
ARABIC_CHARSET 此字体支持阿拉伯语字符集。
BALTIC_CHARSET 此字体支持波罗的海字符集。
CHINESEBIG5_CHARSET 此字体支持繁体中文 (Big 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

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

含义
FIXED_PITCH 对于固定间距字体
VARIABLE_PITCH 对于可变间距字体
 

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

含义
FF_DECORATIVE 新奇字体,如旧英语。
FF_DONTCARE 不在乎或未知。
FF_MODERN 笔划宽度恒定的字体 (带或不带衬线的固定间距) 。 固定间距字体通常是新式字体,例如 Pica、Elite 和 Courier。
FF_ROMAN 笔划宽度可变的字体 (按比例间距) 和衬线的字体,如 Times Roman、Palatino 和 Century Schoolbook。
FF_SCRIPT 设计为类似于手写的字体,如“脚本”和“草书”。
FF_SWISS 笔划宽度可变的字体 () 不带衬线的按比例间距的字体,如 Helvetica 和 Swiss。

usWinWeight

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

flInfo

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

FM_INFO_1BPP

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

FM_INFO_4BPP

指示字形位图的颜色深度为每像素 4 位。 如果字体支持具有 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 EnumFontFamiliesExEnumFontFamiliesEnumFonts 例程不会枚举此字体。 此外,返回到 Win32 应用程序调用 GetTextFace 的字符串将从 字符串 dpwszUniqueName 中检索。 此标志允许字体提供程序将多个 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

指示该字体是包含 CFF) 表格的精简字体格式 (的 Pscript OpenType 字体。

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

指定以下标志的组合:

含义
FM_SEL_BOLD 如果字体的字符为粗体,则设置 。
FM_SEL_ITALIC 如果字体的字符是斜体,则设置 。
FM_SEL_NEGATIVE 如果字体的字符的前景和背景颠倒,则设置 。
FM_SEL_OUTLINED 如果字体的字符为空心,则设置 。
FM_SEL_REGULAR 如果字体的字符是正常粗细,则设置 。
FM_SEL_STRIKEOUT 如果字体的字符默认被打掉,则设置;否则,必须模拟删除。
FM_SEL_UNDERSCORE 如果字体的所有字符都默认下划线,则设置 ;否则,必须模拟低估。

fsType

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

含义
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

指定字体的高度。

fwdLowestPPEm

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

fwdWinAscender

指定字体的 Windows 升序值。

fwdWinDescender

指定字体的 Windows 后代值。

fwdMacAscender

指定字体的 Macintosh 升序符值。

fwdMacDescender

指定字体的 Macintosh 后代值。 此数字通常小于零。 它测量 Macintosh 字符集中最低下级基线的有符号位移。

fwdMacLineGap

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

fwdTypoAscender

指定字体的版式升序值。

fwdTypoDescender

指定字体的版式后代值。 此值指定基线中最低后代的有符号置换。

fwdTypoLineGap

指定字体的版式行间距。

fwdAveCharWidth

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

fwdMaxCharInc

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

fwdCapHeight

指定描述大写“H”顶部的光学线的高度(以字体单位 (FUnits) )。 这可能与大写“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

指定解释 panose 数字的方式。 对于基于拉丁文的字体,此数字应设置为 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 成员。

要求

要求
Header winddi.h (包括 Winddi.h)

另请参阅

DrvQueryFont

IFIEXTRA

PATHOBJ