【问题标题】:How to make WinForms application completely ignore any kind of DPI settings?如何让 WinForms 应用程序完全忽略任何类型的 DPI 设置?
【发布时间】:2016-03-12 03:27:24
【问题描述】:

我有用 VB .NET 编写的 WinForms 应用程序,它在非默认 DPI 设置上“爆炸”。此应用程序使用了一些不支持缩放的 ActiveX 控件。

我恳请您不要建议我重写它,将其移至 WPF 和此类建议。我完全意识到这个应用程序很糟糕,非常糟糕。我的工作就是让它“工作”。

有什么办法可以让应用程序完全忽略任何 DPI 设置?任何解决方案都是好的,只要它有效。

【问题讨论】:

    标签: vb.net windows winforms dpi


    【解决方案1】:

    右键单击可执行文件 -> 属性 -> 兼容性 -> 选中“在高 DPI 设置下禁用显示缩放”。 (在 Windows 10 以外的版本上可能略有不同。) 对于“爆炸”的遗留应用程序,这对我来说是这样的。

    【讨论】:

    • 不适用于 Windows 7。这完全被忽略了。
    • 应用程序无法忽略此设置,无论是否为 Window 7。您确定您在正确的可执行文件上执行此操作吗?如果您启动应用程序并转到任务管理器...打开文件位置并在 that exe 上执行此设置,它仍然被忽略吗?
    • 是的,我愿意。我什至读到其他人有同样的问题(没有答案)。
    【解决方案2】:

    尝试将AutoScaleMode 设置为None 以实现自动缩放。您可能还必须“缩放”字体。这可以通过在InitializeComponent之前添加以下内容来完成

    Font = new Font(Font.Name, Font.Size * 96f / CreateGraphics().DpiX, Font.Style, Font.Unit, Font.GdiCharSet, Font.GdiVerticalFont);
    

    我不知道托管的 ActiveX 控件如何响应这些设置。尝试后请告诉我。

    【讨论】:

    • 为表单设置 AutoScaleMode 不知何故被忽略了。
    【解决方案3】:

    将此添加到您的清单文件中应该可以解决问题:

     <asmv3:windowsSettings 
        xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
           <dpiAware>false</dpiAware>   
     </asmv3:windowsSettings>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 2010-10-05
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 2012-08-04
      • 2020-01-07
      相关资源
      最近更新 更多