我试图在MSDN上找到这个答案,但我没有清楚地知道这是如何工作的。我所有的工作都在Windows 8.1上。Windows设备坐标与虚拟坐标
这是我的问题。我正在使用高分辨率显示器3200x1800的笔记本电脑。我一直在使用EnumDisplayMonitors来获取屏幕的边界矩形。
这似乎工作正常,如果我的显示设置是默认的。但我注意到,当我改变窗口显示设置以提供更大的文本时,EnumDisplayMonitor返回的分辨率发生变化。而不是得到3200x1800我会得到2133x1200。
我猜,因为我要求较大的文本,Windows选择将屏幕表示为较小的分辨率。
看来,如果我看虚拟屏幕属性,所有内容都以我的屏幕的实际坐标表示,即3200x1800。但用于获取窗口和监视矩形的API似乎在这个“其他”坐标空间上运行。
是否有任何文档/ Windows API来处理这些“其他坐标”和“虚拟坐标”之间的转换?即如果我想让EnumDisplayMonitor或GetMonitorInfo给我真正的屏幕坐标,我怎样才能将2133x1200转换为3200x1800?
啊这是我想的答案。我感到非常困惑,因为无论我改变了什么,从枚举监视器设备收到的DPI始终是相同的。但决议不断变化。听起来像Windows正在骗我。所以,现在对于一个*后续问题,如果我现在更愿意让我的应用程序DPI *不知道*,那么确定DPI的最简单方法是什么?有什么方法可以计算它吗? – anoneironaut
如果你喜欢被骗,那么你只是不在乎它可能是什么。你只需假设96 dpi。 –
但我想知道各种显示器和窗口的真实分辨率是多少。好像所有的窗口提供这样做的API只有在我的应用程序是“DPI Aware”时才有效。所以我想知道如果我不是DPI Aware,我可以做这些转换。 – anoneironaut