我能否提高 Windows 表单的分辨率 / DPI?(是否有方法来缩放控件?)

3
我正在使用C#开发一个Windows Forms应用程序,用于办公室。迄今为止,通过锚定和自适应大小,控件在默认表单大小、最大化等方面都能很好地布局。
但是,在会议室中,在大型投影屏幕上,该窗体看起来并不好看。文本太小了,难以轻松阅读。
我们的机器上运行Windows 7,因此我尝试将显示渲染从100%提高到150%。这使得控件上的文本模糊不清,因此我进行了一些研究,然后将以下内容添加到我的Main()方法中。
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool SetProcessDPIAware;

这个方案效果非常好——应用程序可以自适应,控件也很大且易读,而且一切都能够良好地布局。唯一的问题是更改显示渲染会强制您注销,这很不方便,现实情况下我们的用户永远不会这么做。计算机可能会保持在100%。

我能否在应用程序内部完成此操作?我看到了很多关于将应用程序强制降至96 DPI的问题,但是否可能将其强制升至120或144 DPI呢?

或者,也许有一种不同且更好的方式来实现相同的目标?如果可能的话,我想避免构建单独的“演示模式”界面与大字体。


1
我认为你应该使用WPF而不是WinForms,因为WPF默认支持分辨率独立。通过在整个应用程序中包装一个“Viewbox”(2行XAML),你可以解决所有问题。 - Federico Berasategui
1
@HighCore 我发现通过运行以下代码可以得到接近我所需的效果: this.SuspendLayout(); this.AutoScaleDimensions = new System.Drawing.SizeF(72F, 72F); this.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.PerformAutoScale(); - ohioDeveloper
无论您是否已经拥有现有(遗留)WinForms应用程序,WinForms并不推荐用于任何新项目。它是一种非常古老的技术,不符合当今的UI标准。如果它是其他应用程序的“伴侣”,也并不重要,WPF是.Net Windows桌面应用程序的默认和首选UI框架。 - Federico Berasategui
我知道这是一个糟糕的借口 - 但我们许多将来会维护此应用程序的开发人员并不熟悉WPF。那是什么?它不同吗?我们不喜欢那个! 我经常提醒人们,像功能区工具栏这样的东西自2007年以来就很常见了吧?不是所有的东西都可以看起来像Windows XP。但是我遇到了很多阻力。 - ohioDeveloper
顺便说一句,你可能想向WinForms开发人员展示这个小视频,并告诉他们尝试在WinForms中做同样的事情... - Federico Berasategui
显示剩余5条评论
1个回答

1
由于在Windows Forms中正确处理DPI所需付出的努力,我们最终选择了一条更简单的路线:更改窗体的字体。
如果所有控件都设置为按字体自动缩放(这是它们的默认设置),您可以针对每个窗体覆盖系统字体。
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

有些控件不会从表单的字体中获取样式,需要单独设置,例如菜单栏。

menuStrip1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

我们将表单的字体大小更改为14,将菜单的字体大小更改为15以增加可读性,然后将它们改回原始值以返回标准模式。
请注意,就像一些控件默认情况下会忽略表单字体一样,许多(如果不是全部)控件可以并将忽略此设置,如果您手动配置了它们的字体(例如使文本粗体或斜体等),则需要单独处理每个实例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接