DrawTextExW 函数 (winuser.h)

DrawTextEx 函数绘制指定矩形中的格式化文本。

语法

int DrawTextExW(
  [in]      HDC              hdc,
  [in, out] LPWSTR           lpchText,
  [in]      int              cchText,
  [in, out] LPRECT           lprc,
  [in]      UINT             format,
  [in]      LPDRAWTEXTPARAMS lpdtp
);

参数

[in] hdc

要在其中绘制的设备上下文的句柄。

[in, out] lpchText

指向包含要绘制的文本的字符串的指针。 如果 cchText 参数为 -1,则字符串必须以 null 结尾。

如果 dwDTFormat 包含DT_MODIFYSTRING,该函数最多可以为此字符串添加四个字符。 包含字符串的缓冲区应足够大,足以容纳这些额外的字符。

[in] cchText

lpchText指向的字符串 的 长度。 如果 cchText 为 -1,则假定 lpchText 参数是指向 null 终止字符串的指针,DrawTextEx 自动计算字符计数。

[in, out] lprc

指向 RECT 结构的指针,该结构包含要设置文本格式的逻辑坐标中的矩形。

[in] format

格式设置选项。 此参数可以是以下一个或多个值。

价值 意义
DT_BOTTOM
将文本对齐到矩形底部。 此值仅用于DT_SINGLELINE值。
DT_CALCRECT
确定矩形的宽度和高度。 如果有多行文本,DrawTextEx 使用由 lprc 参数指向的矩形的宽度,并将矩形的基数扩展为绑定最后一行文本。 如果只有一行文本,DrawTextEx 修改矩形的右侧,使其绑定行中的最后一个字符。 在任一情况下,DrawTextEx 返回格式化文本的高度,但不绘制文本。
DT_CENTER
将文本水平居中矩形中。
DT_EDITCONTROL
复制多行编辑控件的文本显示特征。 具体而言,平均字符宽度的计算方式与编辑控件相同,并且函数不显示部分可见的最后一行。
DT_END_ELLIPSIS
对于显示的文本,请将字符串的末尾替换为省略号,以便结果适合指定的矩形。 任何超出矩形限制的单词(不在字符串末尾)都会被截断,而不用省略号。 除非指定了DT_MODIFYSTRING标志,否则不会修改该字符串。

与DT_PATH_ELLIPSIS和DT_WORD_ELLIPSIS进行比较。

DT_EXPANDTABS
展开制表符。 每个选项卡的默认字符数为 8。
DT_EXTERNALLEADING
在行高中包含字体外部前导。 通常,外部前导不包括在文本行的高度中。
DT_HIDEPREFIX
忽略文本中的 ampersand (&) 前缀字符。 后面的字母不会带下划线,但仍会处理其他助记前缀字符。

例:

输入字符串:“&bc&&d”

normal:“abc&d”

DT_HIDEPREFIX:“Abc&d”

与DT_NOPREFIX和DT_PREFIXONLY进行比较。

DT_INTERNAL
使用系统字体计算文本指标。
DT_LEFT
将文本向左对齐。
DT_MODIFYSTRING
修改指定的字符串以匹配显示的文本。 除非指定了DT_END_ELLIPSIS或DT_PATH_ELLIPSIS,否则此值不起作用。
DT_NOCLIP
在不剪裁的情况下绘制。 使用DT_NOCLIP时,DrawTextEx 要快一些。
DT_NOFULLWIDTHCHARBREAK
防止 DBCS(双宽字符串)处的换行,使换行规则等效于 SBCS 字符串。 例如,这可以在韩国窗口中使用,以便提高图标标签的可读性。 除非指定DT_WORDBREAK,否则此值无效。
DT_NOPREFIX
关闭前缀字符的处理。 通常,DrawTextEx 将安和(&)助记前缀字符解释为指令,以强调后面的字符,并将双和(&&)助记前缀字符解释为打印单个和号的指令。 通过指定DT_NOPREFIX,将关闭此处理。 与DT_HIDEPREFIX和DT_PREFIXONLY进行比较
DT_PATH_ELLIPSIS
对于显示的文本,请将字符串中间的字符替换为省略号,以便结果适合指定的矩形。 如果字符串包含反斜杠(\\)字符,则DT_PATH_ELLIPSIS在最后一个反斜杠之后保留尽可能多的文本。 除非指定了DT_MODIFYSTRING标志,否则不会修改该字符串。

与DT_END_ELLIPSIS和DT_WORD_ELLIPSIS进行比较。

DT_PREFIXONLY
仅在与号(&)前缀字符之后字符的位置绘制下划线。 不绘制字符串中的任何字符。

例:

输入字符串:“&bc&&d”

normal:“abc&d”

PREFIXONLY: “ _ ”

与DT_NOPREFIX和DT_HIDEPREFIX进行比较。

DT_RIGHT
将文本对齐到右侧。
DT_RTLREADING
当选定到 hdc 中的字体是希伯来语或阿拉伯语字体时,按从右到左的顺序排列双向文本的布局。 所有文本的默认阅读顺序为从左到右。
DT_SINGLELINE
仅显示单行上的文本。 回车符和换行符不会中断该行。
DT_TABSTOP
设置制表位。 lpDTParams 参数指向的 DRAWTEXTPARAMS 结构指定每个制表位的平均字符宽度数。
DT_TOP
将文本对齐到矩形的顶部。
DT_VCENTER
垂直居中文本。 此值仅用于DT_SINGLELINE值。
DT_WORDBREAK
中断单词。 如果单词沿由 lprc 参数指定的矩形边缘延伸,则单词之间的行将自动中断。 回车符换行序列也会中断该行。
DT_WORD_ELLIPSIS
截断任何不适合矩形的单词并添加省略号。

与DT_END_ELLIPSIS和DT_PATH_ELLIPSIS进行比较。

[in] lpdtp

指向 DRAWTEXTPARAMS 结构的指针,该结构指定其他格式设置选项。 此参数可以 NULL

返回值

如果函数成功,则返回值是逻辑单元中的文本高度。 如果指定了DT_VCENTER或DT_BOTTOM,则返回值为从 lprc->top 到绘制文本底部的偏移量。

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

言论

DrawTextEx 函数仅支持其转义和方向均为零的字体。

设备上下文的文本对齐模式必须包括TA_LEFT、TA_TOP和TA_NOUPDATECP标志。

注意

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

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 winuser.h (包括 Windows.h)
User32.lib
DLL User32.dll
API 集 ext-ms-win-ntuser-misc-l1-2-0(在 Windows 8.1 中引入)

另请参阅

DRAWTEXTPARAMS

DrawText

字体和文本功能

字体和文本概述