[C#]透過取得DPI的值,變更表單大小

[C#]透過取得DPI的值,變更表單大小

在.NET的程式設計中,不論是實際製作程式,或是考微軟的認證,給人的感覺其實很明顯,就是製作一個Windows Form的程式,其實比製作Web Form的程式還簡單。

因為製作Windows Form程式要考量的點比較單純一點,就是控制本機所能夠使用到的資源,並達到程式所要完成的目的。但是製作Web Form的程式就比較複雜一點了,除了要考量到各個不同的瀏覽器之間的相容性,也要考慮到多層式架構以及Client-Server之間Session與ViewState的保存問題。

在寫了那麼多年的Web Form程式後,回過頭來寫的一個Windows Form程式在公司內上線使用後,就馬上遇到一個本機資源上的問題。因為公司內年紀大的同仁多了一點,所以大家很習慣的把Windows的解析度調的比較大,看得比較清楚。

2013-01-22_191744

是的,就是這個設定,著實讓我頭痛了一下。

因為寫Web Form的程式並不會因為更改這個設定就讓我程式的排版亂掉。應該是說,Web在render的過程,本身就是採用FlowLayout的方式去作排版,所以大家也就很習以為常的去看待Web的呈現方式。但是回到了Windows端的應用程式,可就不是那麼好的一件事了。

一開始的預想是這樣的

2013-01-22_194052

但是真的佈署到使用者電腦後就變成了這樣

2013-01-22_194813

是的,就跟上圖一樣,我的程式下半段被切掉了,因為使用者更改畫面解析度的關係。

要解決的辦法其實很簡單,找出使用者的畫面解析度,並適當的變更Form的大小就可以了

而可用的方式中,並沒有直接畫面找出解析度百分比的方式,所以只能透過間接的方式去取得畫面解析度百分比 

// 找出字體大小,並算出比例
float dpiX, dpiY;
Graphics graphics = this.CreateGraphics();
dpiX = graphics.DpiX;
dpiY = graphics.DpiY;

上面的程式碼,主要是找出顯示的DPI值,通常一般螢幕的解析度是96 DPI,所以我把螢幕解析度與使用者畫面大小的百分比列在下方

DPI 大小百分比
96 100%
120 125%
144 150%

所以,透過這樣的方式取得的DPI值,就可以變更程式表單的大小了

// 找出字體大小,並算出比例
float dpiX, dpiY
Graphics graphics = this.CreateGraphics
dpiX = graphics.DpiX;
dpiY = graphics.DpiY;
int intPercent = (dpiX == 96) ? 100 : (dpiX == 120) ? 125 : 150;
	
// 針對字體變更Form的大小
this.Height = this.Height * intPercent / 100;

2013-01-22_195656


 嗯,畫面正常了!!