2009-11-04 27 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。