0

Given an NSView, how can I get its screen-rect and the display it's on, so I can use CGDisplayCreateImageForRect?

I found the NSWindow convertRectToScreen method, but it's only available from 10.7 (I need 10.6 as well), and it still doesn't give the display the NSView is on.

4

1 回答 1

3

假设您不关心获取视图的实际像素大小(因为它在 HDPI 和常规显示器之间会有所不同——我无法想象它现在会是一个有用的值),您基本上只想使用NSViewconvertRect:toView:和 NSWindow 的组合convertBaseToScreen:。所以,例如,[someView.window convertBaseToScreen:[someView convertRect:someView.bounds toView:nil]]。这是假设您没有以任何不寻常的方式(旋转它或其他方式)转换视图。请记住,您仍然应该添加一个检查窗口是否响应convertRectToScreen:并在它响应时使用它 - 这样您就可以避免使用已弃用的方法 ( convertBaseToScreen:) 在可能的情况下。

之后,如果您需要屏幕的确切像素大小,则可以使用 NSScreen convertRectToBacking:(我不确定您是否需要它)。至于确定屏幕,NSWindow 有它的screen方法,在大多数情况下应该足够了。我能看到的唯一问题是视图跨屏幕时,因此您可能必须检查它是否与任何其他显示器相交并合并图像等等。也就是说,我不确定是否CGDisplayCreateImageForRect会考虑到这一点。你必须自己测试一下。

于 2012-09-01T16:11:24.907 回答