DrawText和TextOut在Win32中的区别

18
我之前使用过这两个函数,但我不太清楚它们之间的区别。我知道DrawText需要一个格式化矩形,并且可以进行一些文本格式设置,而TextOut只需要起始坐标,除此之外还有其他区别吗?

unlink TextOut; DrawText有一个格式标志参数,可以控制输出文本的行为,例如DT_NOPREFIX可以将文本'&R'转换为'&R',默认情况下会将其转换为助记符快捷方式(下划线R),用于显示按钮或标签控件时。 - antonio
3个回答

19

DrawText

  • 该函数将一个文本字符串绘制到指定的矩形区域内(以逻辑坐标表示)。
  • 它提供了方便的方法来格式化多行文本。
  • 它主要用于断字、段落格式化、制表符扩展等。

TextOut

  • 该函数是一个简单的文本绘制函数,易于使用。
  • 它在指定位置使用当前选择的文本属性绘制字符字符串。
  • 要绘制的文本字符串不需要以零结尾。

此外,请查看ExtTextOutDrawTextEx


4
补充说明:DrawText 会考虑字距调整(kerning),而 TextOut 则不会。 - BeyelerStudios
DrawText是无用的,因为它不会绘制不包含文本的区域。这导致旧文本仍然留在屏幕上。在调用DrawText之前进行背景擦除将导致WinXp上的闪烁。我总是不得不使用ExtTextOut。 - user13947194

6

DrawText() 是 User32.dll 库中的函数。

TextOut() 是 Gdi32.dll 库中的函数。

在实现中,DrawText 很可能会调用 TextOut 函数。


1
是的,没错。ExtTextOut 通常更快。但是有一些边缘情况 - c00000fd

2
DrawText可以用来获取文本的长度或大小,而不必实际显示文本。当您需要确定一组字符串的最大显示长度时,这将非常有用。此外,如果您在DrawText中提供了一个以空字符结尾的字符串作为输入,则无需提供字符串的长度 - 这将自动创建。
请查看thisthis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接