【发布时间】:2011-03-14 19:17:38
【问题描述】:
我在一家将 Winforms 应用程序作为我们的旗舰产品的公司工作。 我们最近重新设计了品牌和 UI。我们注意到表单现在无法正确显示文本,并且某些控件未对齐或从边缘消失。
由于我们没有时间,我是否可以在此应用程序上以最少的重构量制作 DPI-Aware 表单。
【问题讨论】:
-
可以迁移到 WPF,但速度不快。
-
很可能 :) 谢谢 ...
我在一家将 Winforms 应用程序作为我们的旗舰产品的公司工作。 我们最近重新设计了品牌和 UI。我们注意到表单现在无法正确显示文本,并且某些控件未对齐或从边缘消失。
由于我们没有时间,我是否可以在此应用程序上以最少的重构量制作 DPI-Aware 表单。
【问题讨论】:
请务必不要指定像素坐标和大小。这排除了使用 Control.Top 和 Control.Left 的可能性,这是设计人员所做的,当您将控件“放置”在表单上时。
要获得适用于不同 DPI 设置的 UI,几乎所有内容都必须动态调整大小。控件应启用Control.AutoSize。但是仅仅启用AutoSize 会完全搞砸你的布局,因为控制位置仍然是静态的。
要动态定位控件,您可以使用容器控件,例如FlowLayoutPanel 和TableLayoutPanel(大小设置为AutoSize)。然后,其中的普通控件将根据自动确定的大小在表单周围移动。
如您所见,这并不简单,需要一些经验才能正确完成,并且需要进行大量测试(具有不同 DPI 设置的虚拟机效果很好)。但我认为绝对应该这样做,因为如果我的笔记本电脑上的某些东西看起来很愚蠢和错误,我总是很生气。
【讨论】:
最快的方法是覆盖 OnPaint 并使用 Graphics.DpiX 和 DpiY 属性。参考http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx 唯一的建议是使用清单文件而不是SetDpiAware
【讨论】: