Как заставить приложение WinForms полностью игнорировать любые настройки DPI?
У меня есть приложение WinForms, написанное на VB .NET, которое "взрывается" при нестандартных настройках DPI. Это приложение использует некоторые элементы управления ActiveX, которые просто не работают с масштабированием.
Я прошу вас не предлагать мне переписать его, перенести в WPF и подобные советы. Я полностью осознаю, что это приложение плохое, действительно плохое. Моя работа - просто сделать так, чтобы это "работало".
Есть ли способ сделать так, чтобы приложение полностью игнорировало любой параметр DPI? Любое решение хорошо, пока оно работает.
3 ответа
Добавление этого в ваш файл манифеста должно помочь:
<asmv3:windowsSettings
xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>false</dpiAware>
</asmv3:windowsSettings>
Щелкните правой кнопкой мыши исполняемый файл -> Свойства -> Совместимость -> Установите флажок "Отключить масштабирование экрана при настройках с высоким разрешением". (Может отличаться от версии для Windows, отличной от 10.) Это сделано для меня для устаревших приложений, которые "взрываются".
Попробуйте установить AutoScaleMode
в None
для автоматического масштабирования. Вы, вероятно, также должны "масштабировать" шрифт. Это может быть сделано путем добавления следующего перед InitializeComponent
Font = new Font(Font.Name, Font.Size * 96f / CreateGraphics().DpiX, Font.Style, Font.Unit, Font.GdiCharSet, Font.GdiVerticalFont);
Я не знаю, как размещенный элемент управления ActiveX реагирует на эти параметры. Пожалуйста, дайте мне знать, когда вы попробовали.