2

次のコードを完了すると、"font1" が通常で "font2" が太字であるにもかかわらず、"result1" 変数と "result2" 変数 (測定された文字列の幅) の値は同じになります。興味深いことに、このエラーはフォント「Times New Roman」と「Arial」で表示されます。たとえば、フォント「Calibri」の戻り値は正しく、変数「result2」の値は変数「result1」の値よりも大きくなります。なぜこうなった?

using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromHwnd(IntPtr.Zero))
{
    graphics.PageUnit = System.Drawing.GraphicsUnit.Pixel;
    graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
    System.Drawing.Font font1 = new System.Drawing.Font("Arial", 10.0f, System.Drawing.FontStyle.Regular);
    System.Drawing.Font font2 = new System.Drawing.Font("Arial", 10.0f, System.Drawing.FontStyle.Bold);
    float result1 = graphics.MeasureString("WWW", font1, int.MaxValue, System.Drawing.StringFormat.GenericTypographic).Width;
    float result2 = graphics.MeasureString("WWW", font2, int.MaxValue, System.Drawing.StringFormat.GenericTypographic).Width;
}
4

2 に答える 2

3

OnPaint() メソッドで実際に描画すると、その理由がわかります。

ここに画像の説明を入力

于 2011-11-07T18:25:02.460 に答える
2

違う弦で試してみたら、幅が変わった。たまたま「WWW」の長さが太字の有無にかかわらず同じだと思います。エディターで試してみると、同じサイズであることがわかります。

于 2011-11-07T18:27:54.977 に答える