2012-04-28 22 views
0

私のNSViewsと私がプログラムで作成したウィンドウは、画面の解像度が何であっても、メインのデスクトップに接続されているディスプレイの数にかかわらず固定の位置にしています。例えば、私が外部モニタを持っている場合や、画面解像度を変更する場合、NSViewまたはNSWindowのNsRectが常に同じ場所に表示されるようにします。これは効果がありますか?NSViewsとNSWindowを固定位置にする

NSRect mainFrame = [[NSScreen mainScreen] frame] 
NSRect helpFrame = NSZeroRect; 
helpFrame.origin.x = (mainFrame.size.width - width)/2.0; 

解像度が何であっても、私のウィンドウのx値を常に中央に置くのですか?私は、外付けモニターを接続すると解像度が変わり、画面の中央がもはや私が望むところではないと感じています。 NSScreen mainScreenは適切なものですか?ありがとう!

答えて

1

まず、あなたが求めているのはあいまいです。 「同じ場所」とはどういう意味ですか?

あなたは何を表示していませんwidthです。それがウィンドウの幅であると仮定すると、あなたが示したものは、 "メイン"スクリーン上のウィンドウを水平に中央に置くXの位置を計算します。しかし、-mainScreenはあなたの考えをしないかもしれません。プライマリディスプレイが必要な場合は、メニューバーのディスプレイに[[NSScreen screens] objectAtIndex:0]が必要です。

しかし、表示された計算を使用してウィンドウのフレームを設定しても、は、画面構成が変更された場合には、になります。アプリケーションオブジェクトからNSApplicationDidChangeScreenParametersNotificationを観察し、それを再入力する必要があります。

ところで、-[NSWindow center]を使用していない理由はありますか?

+0

「NSApplicationDidChangeScreenParametersNotification」の下にオブジェクトをセンタリングする方法はありますか?それを更新する簡単な方法はありますか? –

+0

' - [NSWindow center]'で提供されている位置付けでOKなら、関連するウィンドウで呼び出すだけです。それ以外の場合は、好きな位置を計算し、 '-setFrame ...'メソッドの1つを呼び出します。 –