【问题标题】:Is it possible to react to user's dpi settings in a .NET application是否可以在 .NET 应用程序中对用户的 dpi 设置做出反应
【发布时间】:2014-01-16 15:30:07
【问题描述】:

问题描述:

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

【问题讨论】:

  • 解决方案:使用WPF,默认独立于分辨率。 winforms 什么都不支持。
  • @HighCore 是正确的。这是最初创建 WPF 的原因之一
  • 谢谢大家,我会看看 WPF 并考虑下一次更新。
  • 我无法抗拒添加一些(未经询问且完全偏离主题)的 UI 建议:一个感叹号就足够了(您希望您的应用程序显得专业,而不是幼稚),文本应该在按钮中居中,“JETZT”之前的大空间看起来像一个显示错误,按钮标题应以大写字母开头(与屏幕截图左侧的 XP 对话框相比)。
  • 感谢您的反馈 Heinzi。我故意编辑了图片,以便在此处发布“广告”。通常产品名称出现在您看到上面的空白处。为了澄清,我应该使用黑匣子。此外,蓝色图像框包含产品特定图像。因此,在应用程序本身中,文本以按钮为中心。但是,关于感叹号,您是对的!我会在下次更新时考虑这个问题。

标签: .net vb.net windows


【解决方案1】:

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

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

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


当然,最好的做法是让您的应用程序在任何 DPI 设置下看起来都很棒。如果您无法迁移到 WPF,以下 SO 问题包含很多关于如何使用 WinForms 进行此操作的提示:

【讨论】:

  • 谢谢 Heinzi,我一回家就试试!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多