Wordwrap Win32

时间:2009-05-02 14:43:03

标签: winapi word-wrap

我正在尝试将一个文本块进行自动换行,以便在一个窗口中显示,否则会过长。我使用的字体不是固定宽度的字体,因此GetSystemMetrics不会为我的文本返回准确的值。

使用static窗口不是一个选项,因为static窗口不会告诉我一条至关重要的信息:自动换行后绘制文本的高度。

有什么想法吗?

Billy3

3 个答案:

答案 0 :(得分:4)

查看Win32 API调用DrawtextEx。您需要传递 DT_CALCRECT 选项,告诉Windows您希望计算矩形。

答案 1 :(得分:2)

您可以使用DrawText() API函数并设置 DT_CALCRECT 标志。您需要先为HDC选择正确的字体。

答案 2 :(得分:1)

如果要以单一字体显示整个文本,

DrawTextEx()将执行您想要和所需的一切。

如果你需要混合字体,你必须自己做这项工作。在这种情况下,您需要查看GetTextMetrics()(不是GetSystemMetrics())和GetTextExtentExPoint32()等API,以确定每次运行的位置和大小。

如果您需要处理复杂的脚本(例如,从右到左的语言和脚本根据上下文改变字母的形状),您将需要Uniscribe。注意:Uniscribe功能强大但级别很低。使用更高级别的界面包装它可能需要做很多工作。如果您需要复杂的脚本处理,最好使用浏览器控件。