2017-04-04 93 views
5

我們有一個傳統的.net Windows窗體應用程序。 我們已經用Web應用程序替換了它的大部分,但仍然使用Windows窗體應用程序進行管理任務。爲什麼在同一臺4k顯示器上顯示的窗口不同

當這個應用程序在4k顯示器上使用時,它看起來非常糟糕,這是可以理解的。

但外觀會根據系統上的其他顯示器而變化。 測試是在通過顯示器端口連接4k顯示器的聯想430上完成的。 筆記本電腦顯示器的分辨率是1920/1080,4k顯示器的分辨率是3840/2160。顯示比例始終爲200%。

以下所有屏幕截圖都是在4k顯示器上拍攝的。與兩個監視器活性

  1. 一個測試
  2. 與第二屏幕的一個測試僅
  3. 與筆記本顯示器一個測試閉合(這意味着只提供一個監視器,用於系統)

enter image description here enter image description here enter image description here

我知道我們的應用如果沒有更改並設置dpiAware/dpiAwareness,在4k上看起來不太好。

但我的問題是: 爲什麼應用程序只會根據哪些監視器處於活動狀態而發生變化?有沒有一種方法可以控制哪種外觀?

+2

根據我所知,發生這種情況的部分原因是因爲您如何設置winforms的佈局屬性。例如,如果'AutoSize'設置爲'True',則每次更改顯示器分辨率都會影響表單大小。 'Anchor'和'Dock'也是如此,這就是爲什麼大多數人喜歡WPF而不是WinForms。如果沒有適當地設置這個屬性,從3840/2160到1920/1080監視器,你會得到一個「抽象」(試圖在這裏畫一個笑話)winform。 –

回答

2

也許你意識到這一點,但它不是前面提到的:

有3各種應用程序:

  • 不知道DPI
  • 系統DPI AWA再
  • 每監視器DPI知道

詳情點擊這裏: https://msdn.microsoft.com/de-de/library/windows/desktop/dn469266(v=vs.85).aspx

您可以設置您的應用程序的DPI-意識的app.config:

<appSettings> 
    <add key="EnableWindowsFormsHighDpiAutoResizing" value="false" /> 
</appSettings> 

和app.manifest:

<application xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <windowsSettings> 
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware> 
    </windowsSettings> 
</application> 

當你DPI> = 150%縮放可通過 RMB在應用程序 - >屬性 - >兼容性 - >高DPI上縮放來額外控制。

對於Windows窗體,默認爲DPI-Scaling禁用高DPI。所以所有的東西都可以在盒子裏運行。也許這其中的一個設置不是默認的?尤其是配置在exe文件上的人民幣屬性?

3

微軟意識到了這個問題,並支持.Net 4.7框架固定它:

https://blogs.msdn.microsoft.com/dotnet/2017/04/05/announcing-the-net-framework-4-7/

+0

從4.7發行說明:「此版本包含一組針對Windows Forms DPI Aware應用程序的高DPI改進。」但我的例子根本不是DPI Aware。它看起來不同,這取決於秒數屏幕。我會用4.7來測試它。 – Manuel

+0

我認爲發行說明中最重要的一句是Windows窗體基於光柵圖形,我個人認爲在您的情況下,200%的縮放比例在爲什麼應用程序在不同顯示器中發生變化時發揮了重要作用。但那仍然是一個猜測。 – Kris

相關問題