我們有一個現有的windows .net應用程序,它使用所有自定義控件。使現有的.NET Windows應用程序能夠識別DPI
由於我們只是支持默認的96 dpi分辨率,這些日子過得很好。
既然我們需要我們的應用程序來識別dpi。事情會失控,當我們去到下一個
更高分辨率的120或144等
最常見的問題
位圖縮放的問題和
文字截止
通過these之後MSDN文檔d existing SO問題,我試圖
白白合併這樣的修復我的應用程序中(因爲使用的所有控件都
定製,並且不DPI的感知)。
事情修改我application.manifest啓用DPI意識標誌和設置AutoScaleMode到AutoScaleMode.Dpi的主要形式和其他形式的使用如AutoScaleMode繼承
- 所變更的控制字體後,我試着在OnLoad事件中
Graphics g = this.CreateGraphics(); int dpi = int.Parse(g.DpiX.ToString());
switch (dpi)
{
case 125:
this.Font = new Font(this.Font.FontFamily, this.Font.Size * 125.0f/(float)(g.DpiX));
Debug.WriteLine("<<---- Selected DPI Resolution :" + " 125 DPI ---->");
break;
... so on
- 試圖重寫ScaleControl方法基於DPI
儘量使用不同的縮放因子但是,所有這些似乎從來沒有在我的情況下工作。
有誰知道/建議我一個更好的方法來解決這個問題。
感謝
VATSAG
這'int dpi = int.Parse(g.DpiX.ToString());'震動我內心的東西。關於問題,我認爲,你不應該通過交換機檢查DPI。使用公式**總是**,公式應該適用於任何dpi。您可能需要重新佈局佈局,只使用自動調整的'Label'並將它們放在'TableLayoutPanel'內(以保證哪些控件不會重疊)等等。如果在「PictureBox」中,位圖應該沒問題。如果你的意思是你的自定義控件,那麼再次 - 公式+佈局。 – Sinatr
對不起,如果我在這裏聽起來很愚蠢......你說這裏的公式是什麼意思? –
例如,對於圖像:'new_width = width * scale * old_dpi/new_dpi;'。 – Sinatr