Graphics.DrawString
と の両方を使用してテキストを描画しようとしていますTextRenderer.DrawText
。Symbolフォントを使用していますが、出力が同じでTextRenderer
はありません - 「以下」、「以上」、「等しくない」という記号を処理しません (バイト値0xA3
、0xB3
、0xB9
) - ボックスを描画しますそれらの代わりに。ただし、他の特殊記号は正しく描画されます。たとえば、「平方根」(0xD6).
などです。両方の方法で同じフォントを使用します。TextRenderer
これらのシンボルを正しく描画するにはどうすればよいですか?
編集:
.NET 4、Windows 7 Ultimate をチェコ語バージョンで実行しています (ただし、英語バージョンでテストしたところ、同じように見えます)。
以下は私のテストアプリのコードです:
private void panelDrawString_Paint( object sender, PaintEventArgs e )
{
byte[] array = new byte[] { 0xA3, 0xB3, 0xB9, 0xA4, 0xD6, 0xB4, 0xB0 };
string s = new string( array.Select( b => (char) b ).ToArray() );
using( StringFormat sf = StringFormat.GenericDefault )
using( Font font = new Font( "Symbol", 14, FontStyle.Regular ) )
{
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
e.Graphics.DrawString( s, font, SystemBrushes.WindowText, panelDrawString.ClientRectangle, sf );
}
}
private void panelTextRenderer_Paint( object sender, PaintEventArgs e )
{
byte[] array = new byte[] { 0xA3, 0xB3, 0xB9, 0xA4, 0xD6, 0xB4, 0xB0 };
string s = new string( array.Select( b => (char) b ).ToArray() );
using( Font font = new Font( "Symbol", 14, FontStyle.Regular ) )
{
TextRenderer.DrawText( e.Graphics, s, font, panelTextRenderer.ClientRectangle, panelTextRenderer.ForeColor );
}
}
そして、これは出力です: