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

标签 macos cocoa

我的 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/

相关文章:

python - 从命令行运行已安装的 python 包

linux - 无法在 Mac 上安装 ejabberd

macos - 关闭 nspopover 不起作用

objective-c - 在 nsscrollview 上绘制 nsiamgeview 时位置错误?

objective-c - 更改 NSTableHeader 中的字体颜色

swift - 修改NSTableview的标题 View

macos - mac high sierra tomat 如何更改端口 8080

mysql - 显示变量 mysql - 我在哪里可以找到这些参数的文件

java - 无法让 AppEngine 在 Eclipse 中工作

macos - 如何设置 NSTableView 中显示为行的 View 的宽度?