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

问题描述:

我目前正在开发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-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

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...