Настройки отображения Windows (Панель управления \ Оформление и персонализация \ Дисплей) влияют на текущее количество точек на дюйм (DPI).На самом деле есть способ получить информацию о DPI в соответствии с MSDN , используя GetDeviceCaps()
:
HDC hdc = ::GetDC(NULL);
int dpiX = ::GetDeviceCaps(hdc, LOGPIXELSX);
int dpiY = ::GetDeviceCaps(hdc, LOGPIXELSY);
::ReleaseDC(NULL, hdc);
Это даст вам DPI в пикселях.Если вам нужен фактический масштабный коэффициент (ge 150%), разделите на 96. 96 - это базовый DPI, поэтому он считается "100%".Вы можете использовать MulDiv () , чтобы целочисленное деление правильно округляло результат при необходимости.
int scaleFactorX = ::MulDiv(dpiX, 100, 96);
int scaleFactorY = ::MulDiv(dpiY, 100, 96);