- (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 屏幕大小的方法。 有什么想法吗?!
最佳答案
您为什么要与 CGWindowID
合作(我猜你所说的 kCGWindowNumber
就是这个意思)?在大多数情况下,这是非常不自然的事情。
无论如何,您可以调用CGWindowListCopyWindowInfo(0, theWindowID)
并检查返回数组的第一个元素中的字典。使用 key kCGWindowBounds
获取边界矩形的字典表示,然后 CGRectMakeWithDictionaryRepresentation()
将其转换为 CGRect
.
您是否正在寻找如何转换NSWindow
-frame
,Cocoa 坐标系中的 到 Core Graphics 坐标系? Cocoa 坐标系的原点位于主显示屏的左下角,Y 沿上方向递增。 Core Graphics 坐标系的原点位于主显示屏的左上角,Y 沿向下方向递增。
因此,转换如下所示:
NSWindow* window = /* ... comes from wherever ... */;
NSRect frame = window.frame;
frame.origin.y = NSMaxY([NSScreen.screens.firstObject frame]) - NSMaxY(frame);
CGRect cgbounds = NSRectToCGRect(frame);
关于macos - 如何从 kCGWindowNumber 获取 NSWindow 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20520902/