Как заставить приложение 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 реагирует на эти параметры. Пожалуйста, дайте мне знать, когда вы попробовали.

Другие вопросы по тегам