Windows窗体中的消除锯齿文本

时间:2009-11-04 14:47:29

标签: .net winforms

我有一个WinForms表单,并希望使所有文本(例如标签,按钮)都消除锯齿。这让我抓狂,因为我在google上找不到任何东西,这或者意味着它是如此明显,或者我离开了基地。

我最好的想法是在我的主窗体中覆盖OnPaint,但这似乎没有改变任何东西。

protected override void OnPaint(PaintEventArgs e) {
    e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
    base.OnPaint(e);
}

帮助!

4 个答案:

答案 0 :(得分:2)

听起来你不希望抗锯齿像ClearType使用的子像素渲染那么多。更具体地说,您可能想要查看TextRenderingHint Enumeration成员ClearTypeGridFit。

答案 1 :(得分:1)

这是因为您所做的只会影响直接在表单上绘制的文本。我想你必须在用户控件中重写OnPaint子类标签,按钮等

答案 2 :(得分:0)

如果我没记错的话,在您按照答案中的描述设置抗锯齿模式后,在DrawString对象上调用Graphics时,抗锯齿功能才有效。

标准WinForms控件不使用此方法,因此简单的覆盖将不起作用。

答案 3 :(得分:0)

我知道这是一个非常老的问题,但是由于有些人仍在使用WinForms(包括我自己),但是我想在这里添加一些有用的信息。

除了将TextRenderingHint设置为AntiAlias之外,还将Graphics.CompositingQuality设置为HighQuality对WinForms中的抗锯齿文本的质量也有重大影响。我至少已使用此技巧来生成自定义的高质量Label和其他表单控件。我发现,没有它,WinForms产生的质量对于现代UI来说并没有真正达到极限,因此结果的质量明显比我在Photoshot / Designer中的模型差。使用此设置后,文本显得更加平滑和清晰。

如何在Label上实现此示例:

public class AntiAliasingLabel : Label
{
    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
        e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), 0, 0);
    }
}