在 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);
这些价值观有什么不同吗?
它可能会有所不同,但这通常仅适用于打印机。可以安全地假设屏幕将始终具有相同的水平和垂直 DPI。
我从未见过它们有什么不同,但在这个MSDN 页面上,我看到一条评论表明它们可能是:
int nHorz = dc.GetDeviceCaps(LOGPIXELSX);
int nVert = dc.GetDeviceCaps(LOGPIXELSY);
// almost always the same in both directions, but sometimes not!
我从未见过它们不同的情况,但是有两个单独的调用这一事实强烈表明它们有时可能是不同的。
如果显示器设置为使用与物理屏幕比例不同的屏幕分辨率,例如 16:9 显示器上的 1600x1200 等 4:3 分辨率,它们很容易有所不同。