Как определить ширину и высоту многострочной строки со шрифтом? - PullRequest
0 голосов
/ 20 марта 2011

Моя программа рисует текстовые строки в прямоугольники, определяя ширину и высоту текста и выбирая шрифт меньшего размера, если он слишком велик для прямоугольника.Но изначально я использовал только однострочный текст, теперь мне нужно несколько многострочных, я использовал GetTextExtentPoint32 , но если в строке есть \ n, кажется, что это нормальный символ.

DrawText с DT_CALCRECT возвращает только высоту текста ...

Есть ли простой способ сделать это?

Ответы [ 2 ]

1 голос
/ 21 марта 2011

Документы для DrawText утверждают, что хотя он и возвращает только высоту, он изменяет прямоугольник , который вы передаете.Вы проверяете прямоугольник или только возвращаемое значение?Звучит так, как будто вы на самом деле хотите передать прямоугольник большой ширины (то есть максимальной ширины, которую вы хотите разрешить), и DrawText будет уменьшаться по мере необходимости.(Если вы передадите небольшую ширину, она развернется только до размера самого большого слова.)

От MSDN :

Если в тексте несколько строкDrawText использует ширину прямоугольника, на который указывает параметр lpRect, и расширяет основание прямоугольника, чтобы ограничить последнюю строку текста.Если наибольшее слово шире прямоугольника, ширина увеличивается.
1 голос
/ 20 марта 2011

Вы должны сделать примерно это (псевдокод):

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;
...