Принудительное масштабирование DPI в стиле XP через приложение VB 2010?

У меня есть приложение на vb.net 2010. на компьютере с Windows 7 пользовательский интерфейс выглядит нормально с разрешением до 120 dpi (125%), поскольку по умолчанию в Windows 7 включено "масштабирование dpi в стиле xp" для значений dpi, равных или меньших 120. при значениях>120 точек на дюйм объекты пользовательского интерфейса смещаются и становятся размытыми, если пользователь вручную не установит (не включит) параметр "xp style dpi scaling" в настройках дисплея. по той же причине ".DpiX" возвращает правильное число для <=120 точек на дюйм, а возвращает 96 для любого значения>120 точек на дюйм, если, опять же, я не включил эту опцию вручную.

Мне интересно, есть ли способ *, например, через манифест), чтобы заставить Windows использовать масштабирование dpi в стиле XP для каждого значения dpi?

1 ответ

Попробуйте использовать следующую настройку в манифесте

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>

Если вы хотите изменить настройки Windows, вам придется манипулировать HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI ключ реестра.

Если масштабирование шрифта критично для вашего приложения, рассмотрите возможность рендеринга собственного текста и масштабируйте его с помощью ScaleTransform

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