Вопрос

При получении DPI для экрана под Windows (с помощью :: GetDeviceCaps) будет ли горизонтальное значение всегда совпадать с вертикальным? Например:

HDC dc = ::GetDC(NULL);
const int xDPI = ::GetDeviceCaps(dc, LOGPIXELSX);
const int yDPI - ::GetDeviceCaps(dc, LOGPIXELSY);
assert(xDPI == yDPI);
::ReleaseDC(NULL, dc);

Являются ли эти значения когда-либо разными?

Это было полезно?

Решение

Возможно, что он будет другим, но это обычно относится только к принтерам. Можно смело предположить, что на экране всегда будут одинаковые горизонтальные и вертикальные DPI.

Другие советы

Я никогда не видел, чтобы они были другими, но на На этой странице MSDN я вижу комментарий, который предполагает, что они могут быть:

   int nHorz = dc.GetDeviceCaps(LOGPIXELSX);
   int nVert = dc.GetDeviceCaps(LOGPIXELSY);

   // almost always the same in both directions, but sometimes not!

Я никогда не видел случая, чтобы они отличались друг от друга, но тот факт, что есть два отдельных вызова, настоятельно предполагает, что они могут быть иногда.

Им легко отличаться, если монитор настроен на использование разрешения экрана, которое отличается от физического разрешения экрана, например, разрешение 4: 3, например 1600x1200 на дисплее 16: 9.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top