ano*_*aut 2 windows coordinates
我试图在MSDN上找到答案,但是我不清楚它是如何工作的。我所有的工作都在Windows 8.1上进行。
这是我的问题。我正在使用具有3200x1800高分辨率显示器的笔记本电脑。我一直在使用EnumDisplayMonitors来获取屏幕的边框。
如果我的显示设置为默认设置,这似乎可以正常工作。但是我注意到,当我更改“窗口”显示设置以提供更大的文本时,EnumDisplayMonitor返回的分辨率也会改变。与其获得3200x1800,不如获得2133x1200。
我猜是因为我要求输入更大的文本,因此Windows选择将屏幕表示为较小的分辨率。
看来,如果我查看虚拟屏幕属性,则所有内容均以屏幕的实际坐标表示,即3200x1800。但是用于获取窗口和监视矩形的API似乎可以在此“其他”坐标空间上运行。
是否有任何文档/ Windows API来处理这些“其他坐标”和“虚拟坐标”之间的转换?即,如果我想让EnumDisplayMonitor或GetMonitorInfo给我真实的屏幕坐标,该如何将2133x1200转换为3200x1800?
您已将视频适配器的DPI增加到150%(每英寸144点),以保持文本可读性,并避免窗口具有邮票的大小。在这样的高分辨率显示器上非常有必要。但是您还没有告诉Windows您的程序知道如何处理它。
因此,假设您的程序是旧程序,并且从未设计过可以在此类监视器上运行。它可以帮助您并且对您说谎。它使您的程序将其输出呈现到内存缓冲区,然后获取该输出,将其重新缩放150%,然后将其复制到视频适配器。这是您可以看到的,如果将程序的输出放在不需要这种缩放的程序旁边(例如记事本),则文本看起来会更加模糊。
当然,当您要求屏幕尺寸时,它由您自己决定。它告诉您它比实际小150%。这样,在重新缩放后,您创建的窗口将填满屏幕。
一切都很好,但是当然并不理想,您的程序看起来不尽如人意。 你必须告诉Windows是你知道如何处理与更高的分辨率。请注意,这看起来比实际中容易。使文本看起来更清晰是微不足道的,位图是有问题的。通常,大量错误的来源,即使是大公司也可能会出错。
| 归档时间: |
|
| 查看次数: |
1249 次 |
| 最近记录: |