是否有可能在.NET应用程序中对用户的dpi设置做出反应

问题描述:

我目前正在开发一个Visual Basic .NET应用程序。 事实certificate,我的应用程序不能正确显示在不同于“标准”(在Windows XP下100%= 96dpi)的dpi设置下运行的系统上。

当我改变系统的dpi设置时,我的GUI看起来有些混乱,你可以在下面的屏幕截图中看到(因为这是一个缩放问题,屏幕截图上的文本应该是德文;对此不好意思):

Windows XP,100%的规模,96 dpi – >一切看起来像我所期望的。 Windows XP,100%缩放,96 dpi

Windows XP,125%缩放,120 dpi – >窗口底部的button不再适合窗口。 Windows XP,125%的规模,120 dpi

我想实现的是:

如果显示比例设置为100%以外,我希望在应用程序启动后立即向用户显示一个警告对话框。

题:

有没有可能读取系统的dpi值? 如果是这样,那将是怎样的呢? 似乎有一个DisplayProperties类以及DisplayInformation类 ,但据我所见,它仅适用于Windows-Store-Apps。

Graphics类的DpiX和DpiY属性包含以下信息:

 Using g = Me.CreateGraphics() Dim dpiX = g.DpiX Dim dpiY = g.DpiY End Using 

由于您使用的是Windows窗体,因此可以使用Form.CreateGraphics创建一个Graphics对象。


当然,最好的做法是让您的应用程序在任何 DPI设置上很棒。 如果你不能移动到WPF,下面的SO问题包含了很多关于如何使用WinForms工作的提示:

  • 创建一个DPI感知应用程序