使用 WinAPI 使用可变字体/格式的文本自动换行块

word wrapping block of text with variable font/formatting using winapi

本文关键字:格式 文本 自动换行 字体 WinAPI 使用      更新时间:2023-10-16

我需要使用 MFC 和/或 Windows API 直接在屏幕上(而不是在富文本控件内)绘制任意字符串。字符串中的字符的字体或颜色可以有所不同,可以是粗体、斜体、下划线或两者的任意组合。此外,用户可以选择在他们选择的范围内换行文本,并可以选择通过调整字体大小来强制文本适合。

我正在考虑做一些类似的事情:

  1. 将其解析为子字符串及其格式的向量
  2. 使用 GetCharABCWidthsFloat 计算所有子字符串的宽度
  3. 手动计算换行符需要落下的位置
  4. 如有必要,使用较小的字体迭代重复上述内容以使文本适合使用
  5. DrawTextW 单独绘制每个子字符串,使用前面子字符串的宽度和换行点确定它们的位置

有没有更好的方法?如果没有,在实施时我应该注意任何陷阱或技巧吗?

(我知道DT_CALCRECT |DT_WORDBREAK DrawText 的标志,但我认为这对我不起作用,因为 a) 它假设整个字符串的字体/格式一致,b) 我看到一些留言板帖子指出它没有正确计算斜体字符的宽度。真的吗?

XAML是你的朋友。没有.NET就无法原生支持,但有第三方库(例如 Xtreme 工具包专业版)。下面是 XAML 标记功能的演示:http://www.codejock.com/download/win32/markupsample.zip

已经使用它多年了。不能抱怨。