2008-11-24 156 views
6

在Windows下获取屏幕的DPI时(通过使用:: GetDeviceCaps),水平值是否始终与垂直相同?例如:Windows GDI:水平/垂直DPI

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

这些值是否有不同?

+0

自320x200显示模式变为过时以来就没有了。 – 2011-08-23 18:38:31

+0

为什么会假设任何事情?你已经知道如何查询两者,为什么不直接查询它们呢?你可能会面向未来的代码,以防万一出现这种情况,情况就会不同! – 2011-08-23 19:25:13

回答

6

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

+0

不要这样做。我们可能不得不再次与非方形像素相抗衡。 – Joshua 2015-05-06 15:37:35

1

我从来没有见过他们有所不同,但在this MSDN网页我看这表明它们可能是一个注释:

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

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

我从来没有见过,他们是不同的情况,但事实上有两个单独的要求强烈表明他们可能有时。

0

如果将显示器设置为使用与物理屏幕比例不同的屏幕分辨率比率,如16:9显示器上的1600:1200等4:3分辨率,则它们很容易不同。