我有一个用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控件是如何响应这些设置的。你试过的时候请告诉我。