[C#]透過取得DPI的值,變更表單大小
在.NET的程式設計中,不論是實際製作程式,或是考微軟的認證,給人的感覺其實很明顯,就是製作一個Windows Form的程式,其實比製作Web Form的程式還簡單。
因為製作Windows Form程式要考量的點比較單純一點,就是控制本機所能夠使用到的資源,並達到程式所要完成的目的。但是製作Web Form的程式就比較複雜一點了,除了要考量到各個不同的瀏覽器之間的相容性,也要考慮到多層式架構以及Client-Server之間Session與ViewState的保存問題。
在寫了那麼多年的Web Form程式後,回過頭來寫的一個Windows Form程式在公司內上線使用後,就馬上遇到一個本機資源上的問題。因為公司內年紀大的同仁多了一點,所以大家很習慣的把Windows的解析度調的比較大,看得比較清楚。
是的,就是這個設定,著實讓我頭痛了一下。
因為寫Web Form的程式並不會因為更改這個設定就讓我程式的排版亂掉。應該是說,Web在render的過程,本身就是採用FlowLayout的方式去作排版,所以大家也就很習以為常的去看待Web的呈現方式。但是回到了Windows端的應用程式,可就不是那麼好的一件事了。
一開始的預想是這樣的
但是真的佈署到使用者電腦後就變成了這樣
是的,就跟上圖一樣,我的程式下半段被切掉了,因為使用者更改畫面解析度的關係。
要解決的辦法其實很簡單,找出使用者的畫面解析度,並適當的變更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;
嗯,畫面正常了!!