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

标签 macos cocoa nswindow

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

相关文章:

cocoa - 动态对象创建

C++ 做 OS X 或 Linux header 不同

c - 通过终端编程 (Mac)

ios - 是否可以通过 XCode 将 iOS 设备远程连接到 mac?

javascript - 在cocoa webview中调用网页的Javascript函数

objective-c - OS X 中的全屏应用程序有多个窗口吗?

swift - 如何正确地向 NSTableView 添加一行

objective-c - 如何关闭从 NSWindowController 启动的窗口

objective-c - 当 dec 不为 0 时,为什么 0xF00 被解释为 NO

macos - MAC Cocoa - 以编程方式设置窗口大小