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

我有一个小型的鼠标位置打印实用程序,我从应用程序商店购买了。当鼠标移动时,它会打印其逻辑位置-似乎与显示布局兼容。
我的任务是编写一个枚举它们的程序,并输出每个监视器的逻辑(顶部/左侧)坐标。这样,当鼠标位置打印实用程序位于左上角/左上角时,这些输出与该鼠标位置打印实用程序的输出匹配。(该实用程序已经翻转了Y坐标),因此我的主显示监视器在左上角为0,0。
我正在非常成功地使用NSScreen的框架,但是无论我做什么,我都无法将Y轴输出(origin.y)转换为从上到下而不是从可可的下到上。
如何翻转每个屏幕上的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));
}
Run Code Online (Sandbox Code Playgroud)
如果需要将任意点或矩形(例如鼠标位置或窗框)转换为该坐标空间,则可以查看以下答案:在Objective-C(OS X)中,是“全局显示”坐标空间,由Quartz Display Services是否与Cocoa的“屏幕”坐标空间相同?
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |