1

Graphics.DrawStringと の両方を使用してテキストを描画しようとしていますTextRenderer.DrawTextSymbolフォントを使用していますが、出力が同じでTextRendererはありません - 「以下」、「以上」、「等しくない」という記号を処理しません (バイト値0xA30xB30xB9) - ボックスを描画しますそれらの代わりに。ただし、他の特殊記号は正しく描画されます。たとえば、「平方根」(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 );
    }
}

そして、これは出力です:

上記のコードの出力

4

1 に答える 1