问题描述:
我目前正在开发 Visual Basic .NET 应用程序。事实证明,我的应用程序无法在运行于与“标准”不同的 dpi 设置(Windows xp 下为 100% = 96dpi)的系统上正确显示。
当我 change the system's dpi settings我的 GUI 看起来有点乱,正如您在以下屏幕截图中看到的那样(因为这是一个缩放问题,所以屏幕截图上的文本是德语应该无关紧要;对此感到抱歉):
Windows XP,100% 比例,96 dpi -> 一切看起来都像我期望的那样。
Windows XP,125% 比例,120 dpi -> 窗口底部的按钮不再适合窗口。
我想要实现的目标:
如果显示比例设置为 100% 以外的任何其他值,我想在应用程序启动后立即向用户显示一个警告对话框。
问题:
是否有可能读取系统的 dpi 值?如果是这样,那会怎样? 似乎有一个DisplayProperties-class以及DisplayInformation-class ,但据我所知,它仅适用于 Windows-Store-Apps。
最佳答案
DpiX和 DpiY Graphics
类的属性包含以下信息:
Using g = Me.CreateGraphics()
Dim dpiX = g.DpiX
Dim dpiY = g.DpiY
End Using
由于您使用的是 Windows 窗体,因此可以使用 Form.CreateGraphics 创建一个 Graphics
对象.
当然,最好的做法是让您的应用程序在任何 DPI 设置下看起来都很棒。如果您不能转移到 WPF,以下 SO 问题包含很多关于如何使用 WinForms 进行此操作的提示:
关于.net - 是否可以在 .NET 应用程序中对用户的 dpi 设置使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21165986/