限られたスペースに文字列を描画するために .NET を使用しています。弦はできるだけ太くしたい。文字列がより多くの行に分割されても問題はありません(長方形内にある場合)。問題は、.NET が単語の途中で文字列を別の行に分割することを望まないことです。たとえば、文字列 "Test" は大きなフォントで 1 行に印刷されます。文字列 "Testing" は小さなフォントで 1 行に印刷する必要があり (1 行に "Testi" と別の行に "ng" ではなく)、文字列 "Test Test" はかなり大きなフォントで 2 行に印刷する必要があります。
私の言葉を破らないように .NET を制限する方法について、誰かアイデアがありましたか?
現在、次のようなコードを使用しています。
internal static void PaintString(string s, int x, int y, int height, int maxwidth, Graphics g, bool underline)
{
FontStyle fs = FontStyle.Bold;
if (underline)
fs |= FontStyle.Underline;
Font fnt = new System.Drawing.Font("Arial", 18, fs);
SizeF size = g.MeasureString(s, fnt, maxwidth);
while (size.Height > height)
{
fnt = new System.Drawing.Font("Arial", fnt.Size - 1, fs);
size = g.MeasureString(s, fnt, maxwidth);
}
y = (int)(y + height / 2 - size.Height / 2);
g.DrawString(s, fnt, new SolidBrush(Color.Black), new Rectangle(x, y, maxwidth, height));
}