Прежде чем получить правильные метрики пикселей от таких функций, как GetSystemMetrics или GetClientRect, ваше приложение должно заявить операционной системе, что оно знает о DPI, и поэтому не будет все портить.
Было несколько изменений в том, как это рекомендуется. См. Документы MSDN для получения более подробной информации.
Начиная с Windows 10:
::SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_SYSTEM_AWARE);
Или начиная с Windows 8.1:
::SetProcessDpiAwareness(DPI_AWARENESS_CONTEXT_SYSTEM_AWARE);
Или начиная с Vista:
::SetProcessDPIAware();
После вызова этой функции функция GetSystemMetrics и т. Д. Должна возвращать правильные значения вашему приложению в пикселях.