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 函数使用当前选定的字体来计算字符串的尺寸。 计算宽度和高度(以逻辑单位为单位)而不考虑任何剪裁。

由于某些设备 kern 字符,字符串中字符的范围之和可能不等于字符串的范围。

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

在处理屏幕上显示的文本时,计算字符串宽度将考虑由 SetTextCharacterExtra 函数设置的字符间距以及由 SetTextJustification设置的理由。 但是,如果在 extTextOut中设置了 lpDxGetTextExtentPoint32 则不考虑字符间距或理由。 但是,使用 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 [仅限桌面应用]
目标平台 窗户
标头 wingdi.h (包括 Windows.h)
Gdi32.lib
DLL Gdi32.dll

另请参阅

ExtTextOut

字体和文本功能

字体和文本概述

SIZE

SetTextCharacterExtra

SetTextJustification