gpt4 book ai didi

macos - 如何从 kCGWindowNumber 获取 NSWindow 大小?

转载 作者:行者123 更新时间:2023-12-03 17:12:14 26 4
gpt4 key购买 nike

- (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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com