11

我使用 CGWindowListCopyWindowInfo 来获取所有窗口的列表。它根据屏幕左上角的原点为我提供每个窗口的坐标。

如果我使用 NSWindow 的 setFrame 方法,则坐标基于屏幕左下角的原点。

什么是从一种转换到另一种的干净、可靠的方法?

补充:干净和可靠,我的意思是,无论用户是否有多个屏幕或正在使用 Spaces,某些东西都可以正常工作。我认为必须有一个使用库 API 的已知习语。

4

3 回答 3

14

数学相当可靠:-)

yFromBottom = screenHeight - windowHeight - yFromTop

主屏幕高度为

[[[NSScreen screens] objectAtIndex:0] frame].size.height
于 2009-05-12T13:58:40.797 回答
3

我建议使用 NSAffineTransform。如果您相对于默认原点进行绘制,然后对视图应用变换,您基本上可以一举翻转事物。

于 2009-05-12T14:00:59.387 回答
2

尝试这样的事情(从这里):

NSRect boundsInWindow = [myView convertRect:[myView bounds] toView:nil];
NSRect visibleRectInWindow = [myView convertRect:[myView visibleRect] toView:nil];

// Flip Y to convert NSWindow coordinates to top-left-based window coordinates.
float borderViewHeight = [[myView window] frame].size.height;
boundsInWindow.origin.y = borderViewHeight - NSMaxY(boundsInWindow);
visibleRectInWindow.origin.y = borderViewHeight - NSMaxY(visibleRectInWindow);
于 2009-05-12T13:59:44.287 回答