【问题标题】:How can i Make my WinForms Application DPI-Aware如何让我的 WinForms 应用程序具有 DPI 感知能力
【发布时间】:2011-03-14 19:17:38
【问题描述】:

我在一家将 Winforms 应用程序作为我们的旗舰产品的公司工作。 我们最近重新设计了品牌和 UI。我们注意到表单现在无法正确显示文本,并且某些控件未对齐或从边缘消失。

由于我们没有时间,我是否可以在此应用程序上以最少的重构量制作 DPI-Aware 表单。

【问题讨论】:

标签: c# winforms dpi


【解决方案1】:

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

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

要动态定位控件,您可以使用容器控件,例如FlowLayoutPanelTableLayoutPanel(大小设置为AutoSize)。然后,其中的普通控件将根据自动确定的大小在表单周围移动。

如您所见,这并不简单,需要一些经验才能正确完成,并且需要进行大量测试(具有不同 DPI 设置的虚拟机效果很好)。但我认为绝对应该这样做,因为如果我的笔记本电脑上的某些东西看起来很愚蠢和错误,我总是很生气。

【讨论】:

  • FlowLayoutPanel 与常规面板。关键不是指定大小,而是指定锚定、停靠和增长属性。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多