是否可以将TextRenderingHint设置为用于整个应用程序?

时间:2010-02-10 11:25:11

标签: c# winforms fonts

我想在C#应用程序中使用抗锯齿字体。我已阅读here如何使用每种形式的Paint事件:

public class SmoothingFonts : System.Windows.Forms.Form
{
    ...

    private void InitializeComponent()
    {
        ...

        this.Paint += this.SmoothingFonts_Paint;
    }

    private void SmoothingFonts_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
        Font TextFont = new Font("Verdana", 25, FontStyle.Italic);
        e.Graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
        e.Graphics.DrawString("Sample Text", TextFont, Brushes.Black, 20, 150);
    }
}

这可能会变得很麻烦,因为我们已经完成了很多表格。此外,在每种形式中我们都使用多种表单类型。可以全局设置TextRenderingHint的设置吗?


编辑1

引用的例子,虽然nobugz正确指出它过时了,但帮助我意识到在这个系统中使用的最好的TextRenderingHintAntiAliasGridFit。硬件平台已关闭,因此我可以确保该系统的最佳配置最适合部署应用程序的所有系统。

我可以在任何地方设置TextRenderingHint的默认设置吗?我正在Windows Embedded Standard(以前的Windows XP Embedded)映像中运行该应用程序。


编辑2

我发现在XP系统中,您可以设置注册表默认使用的TextRenderingHint类型。它不是 by application 方法,而是 by user 方法。注册表项是:

HKCU\Control Panel\Desktop\FontSmoothing      {2 for activating font smoothing}
HKCU\Control Panel\Desktop\FontSmoothingType  {1 for Antialiasing, 2 for ClearType}

感谢您的支持!

2 个答案:

答案 0 :(得分:2)

您链接的文章既无关紧要又过时。 ClearTypeGridFit已经是启用了ClearType的计算机上的默认消除锯齿绘制模式。你应该使用TextRenderer类进行文本渲染,Graphics.DrawString()有问题。

您可以使用SysInternals的ZoomIt实用程序仔细检查是否获得了ClearType消除锯齿功能。放大时,您应该能够看到沿着字体轮廓绘制的红色和蓝色条纹。

答案 1 :(得分:0)

如果以后不打印,可以使用TextRenderer使用GDI文本渲染。其他明智的做法是使用DrawText方法将类似的类作为参数,并在每次调用时设置渲染提示

  TextRenderer.DrawText(    e.Graphics,
                            "Text",
                            font,
                            textRect,
                            ForeColor,
                            BackColor
                            );