7

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

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

这些价值观有什么不同吗?

4

4 回答 4

7

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

于 2008-11-24T17:47:05.610 回答
1

我从未见过它们有什么不同,但在这个MSDN 页面上,我看到一条评论表明它们可能是:

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

   // almost always the same in both directions, but sometimes not!
于 2008-11-24T16:44:58.933 回答
0

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

于 2008-11-24T17:05:42.293 回答
0

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

于 2011-08-23T18:34:33.260 回答