2014-03-26 39 views
1

我有我的MBP視網膜15" 3個外部屏幕的「頂/左」的邏輯點 - 使用偏好/顯示爲‘安排’,模仿他們是如何排列的方式監視器現實生活中。可可:獲得多個屏幕

My monitor setting

我有一個小鼠標位置打印實用程序我下了應用商店。隨着鼠標的旅行,它打印它 - 的邏輯位置,它似乎是與兼容顯示安排。

我的任務是編寫一個程序,會列舉出來,並輸出邏輯(上/左)座標每個顯示器。以便它們位於頂部/左側角落時與鼠標位置打印實用程序的輸出相匹配。 (該實用程序已經翻轉了Y座標),所以我的主顯示器在頂部/左上角是0,0。

我使用NSScreen的框架相當成功,但無論我做什麼,我不能轉換Y軸輸出(origin.y),以從上到下代替可可的底部到頂部。

如何翻轉每個屏幕上的幀的NSRect,使得顯示器配置還是尊重?

回答

3

要得到屏幕畫面,在石英座標,你可以使用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)); 
} 

如果需要任意點或rects(如鼠標位置或窗框)轉換成座標空間,你可以看看這個答案:In Objective-C (OS X), is the "global display" coordinate space used by Quartz Display Services the same as Cocoa's "screen" coordinate space?