解決傳統的Windows Forms在高解析度(High DPI)設定下,所引發的文字模糊問題

現在的筆記型電腦,小小的一塊10吋、12吋面板下,就擠了2K以上的像素,其實人的眼睛根本已經無法分辨,因此在新的Windows作業系統,大家越來越慣用開啟高解析度(High DPI)的設定,也就是去設定顯示器的「變更文字、應用程式與其他項目的大小」,有可能你會設定成125%、150%等大小,這時候你會發現整個作業系統的文字變大變清晰了,但是開啟一些比較傳統的WinForm程式時,卻會發現整個文字都模糊(Text Blurry)掉了。

由下面這張圖我們可以看到,無論是按鈕(Button)的文字,或者是文字方框(TextBox)的文字,看起來都糊糊(Text Blurry)的。

透過兩個步驟來解決這個問題

會發生這樣的原因,是因為以前的WinForm是以像素的觀點來考量一切事情,現在不一樣了,要改用DPI來考量,因此你的WinForm程式碼要進行及小幅度的修改,事實上,只要兩個步驟就完成了。

Step 1. 修正你的Form的AutoScaleMode屬性,從Font改成DPI。

Step 2. 打開方案總管,找到你這個方案下的Program.cs,加入兩行程式碼如下。

在class Program下加入:

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool SetProcessDPIAware();

在Main()下加入:

if (System.Environment.OSVersion.Version.Major >= 6) { SetProcessDPIAware(); }

修改後的程式碼,看起來會長得跟下方圖示一樣。

修改過後你會發現,你的表單在高DPI的設定下,文字變得更清晰了。

WindowsForms HighDPI TextBlurry