gpt4 book ai didi

macos - Cocoa:获取多个屏幕的 "top/left"逻辑点

转载 作者:行者123 更新时间:2023-12-03 16:25:48 25 4
gpt4 key购买 nike

我的 MBP Retina 15"上有 3 个外部屏幕 - 使用首选项/显示器以模仿现实生活中显示器排列方式的方式“排列”显示器。

My monitor setting

我有一个从应用商店下载的小型鼠标位置打印实用程序。当鼠标移动时,它会打印出它的逻辑位置——而且它似乎与显示排列兼容。

我的任务是编写一个程序来枚举它们,并输出每个监视器的逻辑(上/左)坐标。以便当鼠标位置打印实用程序位于左上角/左上角时,这些输出与该鼠标位置打印实用程序的输出相匹配。 (该实用程序已经翻转了 Y 坐标)所以我的主显示器是左上角/左上角的 0,0。

我非常成功地使用了 NSScreen 的框架,但无论我做什么,我都无法将 Y 轴输出(origin.y)转换为从上到下,而不是 cocoa 的从下到上。

如何翻转每个屏幕上的 NSRect 框架,以便仍然尊重显示排列?

最佳答案

要获取 Quartz 坐标中的屏幕框架,可以使用 Quartz Display Services API :

for(NSScreen* screen in [NSScreen screens])
{
NSRect cocoaScreenFrame = [screen frame];
CGDirectDisplayID displayID = [[screen deviceDescription][@"NSScreenNumber"] unsignedIntValue];
CGRect quartzScreenFrame = CGDisplayBounds(displayID);
NSLog(@"Screen frame in Cocoa coordinate space: %@", NSStringFromRect(cocoaScreenFrame));
NSLog(@"Screen frame in Quartz coordinate space:%@", NSStringFromRect(quartzScreenFrame));
}

如果您需要将任意点或矩形(例如鼠标位置或窗口框架)转换为该坐标空间,您可以看看这个答案:In Objective-C (OS X), is the "global display" coordinate space used by Quartz Display Services the same as Cocoa's "screen" coordinate space?

关于macos - Cocoa:获取多个屏幕的 "top/left"逻辑点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22671916/

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