2009-11-04 74 views
2

我有一个WinForms窗体,并希望使所有文本(例如标签,按钮)都是消除锯齿的。这让我疯狂,因为我在谷歌上找不到任何东西,这意味着它非常明显,或者我远离基地。Windows窗体中的消除锯齿文本

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

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

帮助!

回答

1

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

+0

我想我只是假设在绘画本身之后,Form会将相同的Graphics实例传递给它的子控件来绘制自己,所以通过在绘制任何东西之前设置TextRenderingHint,它将贯穿始终。但基本上你是说每个控件都有自己的Graphics实例,所以没有办法在全局范围内完成此任务,而不用为每个控件使用子类。 – 2009-11-04 15:33:16

+0

很确定窗体和包含的控件不共享相同的图形上下文。 – 2009-11-04 15:43:22

0

如果我没有记错的话,在您按照您的答案中所述设置消除锯齿模式后,消除锯齿功能仅适用于在Graphics对象上调用DrawString

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

+0

实际上,重写OnPaint就像hvjackson为窗体所做的那样,但是对于用户控件子类化Button类有一些效果。 – 2009-11-04 15:07:24

+1

所有取决于控制如何吸引我猜。 – 2009-11-04 15:20:19

2

这听起来像你不想像ClearType所使用的亚像素渲染那样需要抗锯齿。更具体地说,您可能想查看TextRenderingHint Enumeration成员ClearTypeGridFit。