2011-03-20 173 views
0

我的程序通过计算文本的宽度和高度将文本字符串绘制成矩形,如果矩形太大则选择较小的字体。但最初我只使用单行文本,现在我需要一些多行内容,我曾经使用GetTextExtentPoint32,但是如果字符串中有\ n,它似乎认为这是一个正常字符。如何计算多字符串的字体宽度和高度?

DrawText与DT_CALCRECT只返回文本的高度...

有没有一种简单的方法来做到这一点?

+0

您不能永久缩小字体,否则将无法阅读。所以最终你将不得不添加一个滚动条或一个More ...按钮或其他方式来处理它。由于你必须这样做,玩字体大小看起来像是高成本/低回报的活动。当然,除非客户要求这项要求,并且您按小时付款。 – 2011-03-20 19:21:33

+0

我在应用程序创建时加载了20个HFONT,最小的是5个高度,如果没有字体适合矩形,那么它将不会绘制任何东西:P和令人惊讶的性能非常好! – Kaije 2011-03-20 19:25:50

回答

1

文档为DrawText状态,虽然它只返回的高度,它修改传递给它的矩形。你正在检查矩形,还是只返回值?这听起来像你实际上想要传递一个宽度很大的矩形(即,你想允许的最大宽度),并且DrawText会根据需要减少。 (如果你在一个小宽度通过,将展开它只够满足最大的字。)

MSDN

如果存在多行文字,DrawText的使用矩形的宽指出,通过lpRect参数并扩展矩形的底部以限定最后一行文本。如果最大的单词比矩形宽,则宽度将展开。
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;