Объявление высокой осведомленности о DPI для каждого окна в Windows 8

Я разрабатываю аудио плагины, которые запускаются на хосте, таком как Cubase, и я жду, чтобы добавить поддержку High DPI. Это проблематично, потому что все хост-приложения, о которых я знаю, объявляют себя не поддерживающими DPI, поэтому DWM автоматически масштабирует все окна. Я ищу способ отключить масштабирование DWM DPI для окна плагина, даже если сам хост не поддерживает DPI (поэтому он использует масштабирование DWM DPI для всех других окон). Кто-нибудь знает, возможно ли это вообще?

Для приложений, которые используют много плагинов, таких как аудио-хосты, это очень реальная проблема, потому что они не могут просто заявить о себе с высокой разрешающей способностью: это сломает все существующие плагины. Так что, если Windows не предоставляет решения для этого, мы всегда застряли в области с разрешением 96 dpi. По сути, я думаю, что нам нужно более детальное решение, чем настройка этого процесса, поэтому хост и плагины могут индивидуально заявить о своем уровне осведомленности.

В случае, если это в настоящее время не может быть сделано, есть ли способ связаться с инженером Microsoft, чтобы его можно было добавить в будущую версию Windows?

2 ответа

Решение

По окнам DPI осведомленность теперь возможна, так как Windows 10 юбилейное обновление. Новый API SetThreadDpiAwarenessContext () можно использовать для установки для каждого окна и осведомленности о DPI потока. Это достигается следующим образом.

  • Поток теперь может динамически изменять свой DPI DPInsss.
  • Осведомленность о DPI окна, созданного потоком, будет зависеть от осведомленности о DPI вызывающего потока во время создания окон.
  • Когда вызывается оконная процедура для окна, поток автоматически переключается на контекст осведомленности DPI, который использовался при создании окна.

Прочитайте следующие ссылки.

Вам не повезло здесь. Осведомленность о DPI - это широкая настройка процесса. В Windows 8.1 вы можете объявить, что процесс поддерживает DPI для каждого монитора.

И, как замечает Рэймонд выше, никакие технические разработки не позволят использовать такие функции API GetCursorPos иметь разрешение DPI для каждого окна, поскольку такие функции не передаются окнам.

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