1

NSWindowこれは、私のサブクラスのコンストラクターですFullScreenWindow

- (id)initWithScreen:(NSScreen *)s {
NSRect contentRect = [s frame];
self = [super initWithContentRect:contentRect
                        styleMask:NSBorderlessWindowMask
                          backing:NSBackingStoreBuffered
                            defer:NO
                           screen:s];
if (self) {
    [self setCollectionBehavior:NSWindowCollectionBehaviorStationary|
                                NSWindowCollectionBehaviorCanJoinAllSpaces|
                                NSWindowCollectionBehaviorIgnoresCycle];
    [self setReleasedWhenClosed:YES];
    [self setBackgroundColor:[NSColor greenColor]];
    [self setAlphaValue:1.0];
    [self setOpaque:NO];
    [self setLevel:NSMainMenuWindowLevel-1];
}
return self;

}

NSWindowすべてのディスプレイにそのようなものを追加したいのですが、2 番目のディスプレイを接続すると、最初のディスプレイ (および2 番目のディスプレイ)にを設定した[NSScreen screens]場合にのみ、ウィンドウが正しい方法で表示されます。インスタンスのフレームの値を取得すると、最初の表示と2 番目の表示に戻ります。これらの座標がずれているのはなぜですか?origin.xcontentRect-14400origin.xNSScreen01440

4

1 に答える 1

8

[NSScreen画面]の1つは、原点として(0、0)を持ちます。
ここで、2つの軸を想像してください。Yは(0、0)から上に移動し、Xは右に移動します。
他のすべての画面にはこの座標系の座標があり、screen.frame.originは左下隅を表します。

ドキュメントでこれを見つけることができなかったので、ディスプレイの配置を試してみました。
私は2台のモニターでこの写真を持っていました:メイン1つは1366x768、セカンダリは1680x1050、上部に配置されています。
#1を#0の周りに動かして、さまざまな配置も試しましたが、私の仮説は常に正しいものでした。

于 2013-02-08T18:36:56.770 に答える