.net - 是否可以在 .NET 应用程序中对用户的 dpi 设置使用react

标签 .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。

最佳答案

DpiXDpiY 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/

相关文章:

javascript - Asp.net 页面在 Internet Explorer 7 和 7+ 版本中加载奇怪的内容

.net - 哪个 .NET 数据提供程序?

python - Python 2.5 中的线程问题,KeyError : 51, 帮助调试吗?

.net - 我有 4 个整数。我如何找到最大/最小的?

asp.net - <#=#>是什么意思

asp.net - 如何使用基于数据表的单元格重复 Tablix

.net - DialogResult 关闭设置对通过 ShowDialog() 显示的表单有影响吗?

c# - 如何将事件添加到 Windows 消息泵队列中?

c# - 是否有事件让我知道 SD 卡是否已安装?必须复制数百张卡片

System32 中的 Ruby Dir.foreach 缺少文件/File.exists?对于现有文件返回 false