11

CGWindowListCopyWindowInfo を使用して、すべてのウィンドウのリストを取得します。画面の左上を原点とする各ウィンドウの座標が得られます。

NSWindow の setFrame メソッドを使用すると、原点が画面の左下にあることに基づいて座標が決まります。

あるものから別のものに変換するためのクリーンで信頼できる方法は何ですか?

追加: クリーンで信頼できるとは、つまり、ユーザーが複数の画面を使用しているか、スペースを使用しているかに関係なく、確実に機能するものです。ライブラリ 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 に答える