我正在尝试同时使用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 );
}
}
这是输出: