gpt4 book ai didi

Windows 设备坐标与虚拟坐标

转载 作者:可可西里 更新时间:2023-11-01 11:18:34 24 4
gpt4 key购买 nike

我试图在 MSDN 上找到这个问题的答案,但我没有清楚地了解它是如何工作的。我的所有工作都在 Windows 8.1 上进行。

这是我的问题。我正在使用具有高分辨率显示器 3200x1800 的笔记本电脑。我一直在使用 EnumDisplayMonitors 来获取屏幕的边界矩形。

如果我的显示设置是默认的,这似乎工作正常。但我注意到,当我更改窗口显示设置以提供更大的文本时,EnumDisplayMonitor 返回的分辨率会发生变化。我将获得 2133x1200 而不是 3200x1800。

我猜是因为我要求更大的文本,Windows 选择将屏幕显示为较小的分辨率。

如果我查看虚拟屏幕属性,似乎一切都以我屏幕的实际坐标表示,即 3200x1800。但是获取窗口和监视器矩形的 API 似乎在这个“其他”坐标空间上运行。

是否有任何文档/Windows API 来处理这些“其他坐标”和“虚拟坐标”之间的转换?即,如果我希望 EnumDisplayMonitor 或 GetMonitorInfo 提供真实的屏幕坐标,我如何将 2133x1200 转换为 3200x1800?

最佳答案

您已将视频适配器的 DPI 增加到 150%(每英寸 144 点)以保持文本可读性并避免窗口大小与邮票一样大。在如此高分辨率的显示器上非常必要。但是你还没有告诉 Windows 你的程序知道如何处理它。

因此它假设您的程序是一个旧程序,从未设计为在此类监视器上运行。它对你有帮助,也对你撒谎。它让您的程序将其输出渲染到内存缓冲区,然后获取该输出,将其重新缩放 150% 并将其复制到视频适配器。这是您可以看到的,如果您将程序的输出放在不要求这种缩放的程序(如记事本)旁边,文本看起来会更模糊。

当然,当您询问屏幕尺寸时,它会骗您。它告诉您它比实际小 150%。这样,在重新缩放后,您创建的窗口将填满屏幕。

一切都很好,但当然不理想,您的程序看起来没有应有的那么好。 You have to tell Windows 知道如何处理更高的分辨率。请注意,这看起来比实际上更容易。让文本看起来清晰是微不足道的,问题在于位图。并且通常是 bug 的丰富来源,甚至是 big companies can get this wrong .

关于Windows 设备坐标与虚拟坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24543095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com