- (void) GetClientRect
NSArray *screenArray = [NSScreen screens];
NSScreen *mainScreen = [NSScreen mainScreen];
unsigned screenCount = [screenArray count];
unsigned index = 0;
for (index; index < screenCount; index++)
{
NSScreen *screen = [screenArray objectAtIndex: index];
NSRect screenRect = [screen visibleFrame];
NSString *mString = ((mainScreen == screen) ? @"Main" : @"not-main");
NSLog(@"Screen #%d (%@) Frame: %@", index, mString, NSStringFromRect(screenRect));
}
}
以上方法用于获取主屏幕框架。 但是我想要返回已经通过了kCGWindowNumber的NSWindow的屏幕尺寸的方法。 有什么想法吗?!
答案 0 :(得分:1)
为什么使用CGWindowID
(我认为kCGWindowNumber
的意思)?在大多数情况下,这是非常不自然的事情。
无论如何,您可以调用CGWindowListCopyWindowInfo(0, theWindowID)
并检查返回数组的第一个元素中的字典。使用键kCGWindowBounds
获取边界矩形的字典表示,然后使用CGRectMakeWithDictionaryRepresentation()
将其转换为CGRect
。
您是否正在寻找如何将Cocoa坐标系中的NSWindow
-frame
转换为Core Graphics坐标系? Cocoa坐标系的起源位于主显示屏的底部 - 左侧,Y在向上方向上增加。核心图形坐标系的起源位于主显示屏的顶部 - 左侧,Y在向下方向上增加。
所以,转换看起来像这样:
NSWindow* window = /* ... comes from wherever ... */;
NSRect frame = window.frame;
frame.origin.y = NSMaxY([NSScreen.screens.firstObject frame]) - NSMaxY(frame);
CGRect cgbounds = NSRectToCGRect(frame);