Windows GDI:水平/垂直DPI

7
在Windows下获取屏幕DPI(使用::GetDeviceCaps)时,水平值是否总是与垂直值相同?例如:
HDC dc = ::GetDC(NULL);
const int xDPI = ::GetDeviceCaps(dc, LOGPIXELSX);
const int yDPI - ::GetDeviceCaps(dc, LOGPIXELSY);
assert(xDPI == yDPI);
::ReleaseDC(NULL, dc);

这些值有时候会不同吗?

自从320x200显示模式过时以来。 - Mark Ransom
为什么要假设任何事情呢?你已经知道如何查询两者,那为什么不分别查询呢?最好将代码未来化,以防万一出现不同的情况! - Aaron Klotz
4个回答

7

虽然有可能会有不同,但这通常只适用于打印机。可以安全地假设屏幕的水平和垂直DPI始终相同。


不要这样做。我们可能再次遇到非方形像素的问题。 - Joshua

1

我从未见过它们不同,但在this的MSDN页面上,我看到一个评论暗示它们可能是不同的:

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

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

0

如果显示器的分辨率比物理屏幕的宽高比不同,如在一个16:9的显示器上使用4:3的1600x1200分辨率,那么它们很容易出现差异。


1
即使物理屏幕不显示正方形像素,也无法配置 Windows 反映这一事实。 - Mark Ransom

0

我从未见过它们不同的情况,但是有两个单独的调用表明它们有时可能不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接