包装块的文本与可变字体/格式使用winapi

时间:2012-06-05 01:20:34

标签: c++ winapi text mfc word-wrap

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

我正在考虑采取以下措施:

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

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

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

1 个答案:

答案 0 :(得分:0)

XAML是你的朋友。没有.NET本身不支持,但有第三方库(例如Xtreme Toolkit Pro)。以下是XAML标记功能的演示: http://www.codejock.com/download/win32/markupsample.zip

多年来一直在使用它。不能抱怨。