GetTextExtentPoint32A 函数 (wingdi.h)

GetTextExtentPoint32 函数计算指定文本字符串的宽度和高度。

语法

BOOL GetTextExtentPoint32A(
  [in]  HDC    hdc,
  [in]  LPCSTR lpString,
  [in]  int    c,
  [out] LPSIZE psizl
);

参数

[in] hdc

设备上下文的句柄。

[in] lpString

指向指定文本字符串的缓冲区的指针。 字符串不需要以 null 结尾,因为 c 参数指定字符串的长度。

[in] c

lpString 指向的字符串的长度

[out] psizl

指向 SIZE 结构的指针,该结构接收字符串的维度(以逻辑单元为单位)。

返回值

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。

注解

GetTextExtentPoint32 函数使用当前所选字体来计算字符串的尺寸。 以逻辑单位表示的宽度和高度在计算时不考虑任何剪裁。

由于某些设备包含字符,因此字符串中字符范围的总和可能不等于字符串的范围。

计算的字符串宽度考虑由 SetTextCharacterExtra 函数设置的字符间距和 SetTextJustification 设置的理由。 这适用于在屏幕上显示和打印。 但是,如果在 ExtTextOut 中设置 lpDx则 GetTextExtentPoint32 不会考虑字符间间距或理由。 此外,对于 EMF,打印结果始终同时考虑字符间间距和理由。

处理屏幕上显示的文本时,计算的字符串宽度会考虑 SetTextCharacterExtra 函数设置的字符间距和 SetTextJustification 设置的理由。 但是,如果在 ExtTextOut 中设置 lpDx则 GetTextExtentPoint32 不会考虑字符间间距或理由。 但是,使用 EMF 打印时:

  • 尽管 GetTextExtentPoint32 考虑了字符间间距,但打印结果会忽略字符间间距。
  • 尽管 GetTextExtentPoint32 忽略了打印结果,但打印结果会考虑理由。
当此函数返回文本范围时,它假定文本是水平范围,即转义程始终为 0。 对于文本的水平和垂直度量,这都是如此。 即使使用指定非零转义的字体,此函数在计算文本范围时也不会使用角度。 应用必须显式转换它。 但是,当图形模式设置为 GM_ADVANCED 并且字符方向与打印方向为 90 度时,此函数返回的值不遵循此规则。 当给定字符串的字符方向和打印方向匹配时,此函数返回 SIZE 结构中字符串的尺寸为 { cx : 116, cy : 18 }。 当同一字符串的字符方向和打印方向相距 90 度时,此函数返回 SIZE 结构中字符串的尺寸为 { cx : 18, cy : 116 }。

GetTextExtentPoint32 在计算文本字符串的高度时,不考虑“\n” (新行) 或“\r\n”, (回车符和新行) 字符。

示例

有关示例,请参阅 在同一行上从不同字体绘制文本

注意

wingdi.h 标头将 GetTextExtentPoint32 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 wingdi.h (包括 Windows.h)
Library Gdi32.lib
DLL Gdi32.dll

另请参阅

ExtTextOut

字体和文本函数

字体和文本概述

SIZE

SetTextCharacterExtra

SetTextJustification