windowswinapiwindows-8.1dpidpi-aware

Declaring high DPI awareness per window on Windows 8


I'm developing audio plugins that run within a host such as Cubase, and I'm looking to add High DPI support. This is problematic because all host applications that I know of declare themselves as non-high DPI aware, so all windows are scaled automatically by the DWM. I'm looking for a way to turn off DWM DPI scaling for the plugin window, even if the host itself is not DPI-aware (so it uses DWM DPI scaling for all other windows). Does anyone know if this is possible at all?

For applications that use a lot of plugins, such as audio hosts, this is a very real problem because they can't just go ahead and declare themselves as high-DPI aware: this would break all existing plugins. So unless Windows provides a solution for this, we're always stuck in 96 dpi land. Basically I think we need a solution that is more fine-grained than setting this per-process, so the host and plugins can individually declare their awareness level.

In case this currently can't be done, is there a way to contact a Microsoft engineer so it could be added to a future version of Windows?


Solution

  • Per window DPI awareness is now possible, since Windows 10 anniversary update. A new API SetThreadDpiAwarenessContext() can be used to set per window,and per thread DPI awareness. This is accomplished as follows.

    Read the following references.