我需要使用 MFC 和/或 Windows API 直接在屏幕上(不在富文本控件内)绘制任意字符串。字符串中的字符可以有不同的字体或颜色,可以是粗体、斜体、下划线或两者的任意组合。此外,用户可以选择将文本包装在他们选择的范围内,并可以通过调整字体大小来强制它适应。
我正在考虑按照以下方式做一些事情:
- 将其解析为子字符串及其格式的向量
- 使用 GetCharABCWidthsFloat 计算所有子字符串的宽度
- 手动计算换行符需要落在哪里
- 如有必要,使用较小的字体重复上述操作以使文本适合
- 使用 DrawTextW 单独绘制每个子字符串,使用前面子字符串的宽度和换行点确定它们的位置
有更好的方法吗?如果没有,在实施时我应该注意什么问题或技巧?
(我知道 DrawText 的 DT_CALCRECT | DT_WORDBREAK 标志,但我认为这对我不起作用,因为 a)它假定整个字符串的字体/格式一致,并且 b)我看到一些留言板帖子指出它不能正确计算斜体字符的宽度。真的?)