如何使WinForms应用程序完全忽略任何类型的DPI设置



我有一个用VB.NET编写的WinForms应用程序,它在非默认DPI设置下"爆炸"。此应用程序使用了一些ActiveX控件,这些控件无法进行缩放。

我恳请你不要建议我重写它,把它转移到WPF和这种建议。我完全意识到这个应用程序很糟糕,真的很糟糕。我的工作就是让它"发挥作用"。

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

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

将其添加到清单文件中应该可以完成以下操作:

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

尝试将AutoScaleMode设置为None以进行自动缩放。您可能还需要"缩放"字体。这可以通过在InitializeComponent 之前添加以下内容来实现

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

我不知道托管的ActiveX控件是如何响应这些设置的。你试过的时候请告诉我。

最新更新