High DPI Awareness

This article describes ‘high dpi’, ‘high resulution’, ‘dpi awareness’, ‘per monitor scaling’ and other display resolution issues.

Types of High-DPI OS settings

There are two ways how high-dpi (high resolution) support may work in Windows.

  • Windows versions before 10 were able to use only one DPI for all display devices. That is unhandy when you have monitors which physical dimensions/DPI differs a lot.
  • Windows 8.1 introduces Per-monitor DPI and you are able now to configure them separately. However, only in Windows 10 implementation becomes rather good.

Also, modern Windows versions do not use ‘DPI’ term. There is ‘Scaling’ defined in per cents.

Types of high-dpi awareness

There are three style of DPI support in modern Windows versions.

DPI-awareness checker

One of the most common delusions of high-dpi support complains is comparison of ConEmu, which is per monitor DPI-aware, with some other application, which is not per monitor DPI-aware.

The only way to check DPI-awareness is an Windows API function GetProcessDpiAwareness which is available in Windows 8.1 or higher.

You may use small console tool CheckDpiAwareness. Its sample output is below.

Process DPI-Awareness checker. (C) 2014 Maximus5

PID     Awareness       Process name
---     ---------       ------------
3540    !PerMonitor     ApplicationFrameHost  Microsoft Edge
884     !PerMonitor     ConEmu.exe            CheckDpiAwareness.exe - Far 3....
1992    !PerMonitor     explorer.exe          <Shell_TrayWnd>
10820   !PerMonitor     iexplore.exe          ConEmu - Windows Console Emula...
11464   SystemAware     MarkdownPad2.exe      ReadMe.md - MarkdownPad 2
2880    Unaware         odbcad32.exe          ODBC Data Source Administrator...

At the moment, most of applications will show either ‘SystemAware’ or ‘Unaware’.

Not DPI-aware

These old applications do not know anything about monitor dpi and how to deal with high resolution.

Windows tries to make them as accessible as possible, so their windows are shown larger than their ‘actual’ sizes so they fit your screen more properly and you may work with them in more comfortable way.

On the other hand that is done by simple upscaling so their client contents as bitmap which causes blurred image.

Only window title bar and frame are maintained by Windows DWM, scaled and displayed properly, not blurred.

Very old calc at 150% and 100% scaling

Per system DPI-aware

These applications provide a way better support of high resolution. And they looks fine if all your monitors have same DPI. However, when you move them to monitor with different DPI their contents will be blurred because of upscaling or downscaling. That is because the application can detect only ‘System DPI’ and do not know anything about different devices.

Per monitor DPI-aware

These applications look fine on any monitor, their contents will not be blurred on any DPI. Unless your system is misconfigured ;-)

However, this type of high-resulution support is most frustrating for developers, because it’s rather incomprehensible what the application should do with its contents. What is the proper way to scale its internal objects? Should it maintain physical window dimensions or number of visible items?

Compare with Windows 10 Explorer. Press Win+E and move the window between monitors with different scaling by Win+Shift+Left and Win+Shift+Right.

Some more examples

Dialogs downscale issues

If your primary monitor has larger scaling percentage than secondary one, you may notice some dialog drawing artefacts. ConEmu tries to do its best to deal with monitor scaling levels, but dialog controls are painted by Windows kernel and without owner-drawn implementation of all standard controls it’s impossible to make them look fine.

Dialog downscale issue

Very old build without dpi-awareness causes blurred text

Very old ConEmu build without dpi-awareness

New dpi-aware build shows clean picture

New dpi-aware ConEmu build