如何用字体计算多字符串的宽度和高度?

时间:2011-03-20 19:17:33

标签: c++ c winapi gdi

我的程序通过计算文本的宽度和高度将文本字符串绘制成矩形,并选择较小的字体(如果它对于矩形来说太大)。但最初我只使用单行文本,现在我需要一些多行,我习惯使用GetTextExtentPoint32,但如果在字符串中有字符串,它似乎将其视为普通字符。

带有DT_CALCRECT的

DrawText仅返回文本的高度...

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:1)

你应该大致这个(伪代码):

size text_dim(0,0);
foreach( line in text.split("\n") )
{
  size line_dim = GetTextExtentPoint32(line.start,line.length);
  text_dim.y += line_dim.y;
  text_dim.x = max(text_dim.x,line_dim.x);
}
return text_dim;

答案 1 :(得分:1)

DrawText的文档声明虽然它只返回高度,但会修改传递它的矩形。你在检查矩形,还是只检查返回值?听起来你实际上想要传入一个宽度较大的矩形(即你想要允许的最大宽度),DrawText会根据需要减少。 (如果你传入一个很小的宽度,它只会扩展它以适应最大的单词。)

来自MSDN

如果有多行文本,DrawText使用lpRect参数指向的矩形的宽度,并扩展矩形的底边以绑定最后一行文本。如果最大的单词比矩形宽,则扩展宽度。