如何使我的WinForms应用程序DPI意识

我在一家拥有Winforms应用程序作为我们旗舰产品的公司工作。 我们最近重新设计了品牌和用户界面。 我们注意到,窗体现在不能正确显示文本,并且某些控件未对齐或已从边缘消失。

由于我们没有时间,因此我可以使用最少量的重新分解来在此应用程序DPI-Aware上制作表单。

您必须不指定像素坐标和大小。 当你将控件“放置”在表单上时,这将排除使用Control.TopControl.Left ,这是设计人员所做的。

要获得适用于不同DPI设置的UI,几乎所有内容都必须动态resize。 控件应启用Control.AutoSize 。 但只是启用AutoSize会完全搞砸你的布局,因为控制位置仍然是静态的。

要动态定位控件,可以使用容器控件,如FlowLayoutPanelTableLayoutPanel (大小设置为AutoSize )。 根据自动确定的尺寸,那些内部的正常控件将仅在表格周围移动。

正如您所看到的,这并不简单,需要一些经验才能使其正确并需要大量测试(具有不同DPI设置的虚拟机工作得很好)。 但我认为应该这样做,因为如果我的笔记本电脑上的东西看起来很愚蠢,我总是很生气。

最快的方法是重写OnPaint并使用Graphics.DpiX和DpiY属性。 请参阅http://msdn.microsoft.com/en-us/library/ms701681(VS.85).aspx,建议使用清单文件而不是SetDpiAware