问题描述:

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

当我change the system's dpi settings时,您的GUI看起来有点困惑,如以下屏幕截图所示(由于这是缩放问题,因此屏幕截图上的文本为德语无所谓;对此表示抱歉):

Windows XP,100%缩放,96 dpi->一切看起来都像我期望的那样。

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

我要实现的目标:

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

问题:

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

最佳答案

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

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

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

当然,最好的做法是使您的应用程序在任何DPI设置下看起来都很棒。如果您不能使用WPF,则以下SO问题包含有关如何使WinForms起作用的许多提示:
  • Creating a DPI-Aware Application
  • 关于.net - 是否可以对.NET应用程序中的用户dpi设置使用react,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21165986/

    10-13 07:43