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

时间:2014-01-16 15:30:07

标签: .net vb.net windows

问题描述:

我目前正在开发Visual Basic .NET应用程序。事实证明,我的应用程序无法在运行与“标准”不同的dpi设置的系统上正常显示(在Windows XP下为100%= 96dpi)。

当我change the system's dpi settings时,我的GUI看起来有些混乱,你可以在下面的截图中看到(因为这是一个缩放问题,屏幕截图上的文字是德语的;不好意思):

Windows XP,100%比例,96 dpi - >一切看起来都像我期待的那样。 Windows XP, 100% scale, 96 dpi

Windows XP,125%比例,120 dpi - >窗口底部的按钮不再适合窗口内部。 Windows XP, 125% scale, 120 dpi

我想要实现的目标:

如果显示比例设置为100%以外的任何值,我想在应用程序启动时立即向用户显示一个警告对话框。

问题:

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

1 个答案:

答案 0 :(得分:6)

Graphics类的DpiXDpiY属性包含以下信息:

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

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


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