0

プログラムで作成したNSViewとウィンドウを、画面の解像度やメインデスクトップに接続しているディスプレイの数に関係なく、固定位置にしようとしています。たとえば、外部モニターを使用している場合、または画面の解像度を変更する場合は、NSViewまたはNSWindowのNsRectを常に同じ場所に表示する必要があります。これは機能しますか?

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

解像度に関係なく、ウィンドウのx値は常に中央に配置されますか?外部モニターを接続すると解像度が変わり、画面の真ん中が思い通りにならない気がします。NSScreen mainScreen呼び出すのが適切ですか?ありがとう!

4

1 に答える 1

1

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

あなたは何widthであるかを示していません。それがウィンドウの幅であると仮定すると、あなたが示したものは、ウィンドウを「メイン」画面の水平方向に中央に配置するX位置を計算します。しかし、-mainScreenあなたが思うことをしないかもしれません。メニューバー付きのプライマリディスプレイが必要な場合は、が必要です[[NSScreen screens] objectAtIndex:0]

ただし、示されている計算を使用してウィンドウのフレームを設定した場合でも、画面構成が変更された場合、ウィンドウは中央に保持されません。NSApplicationDidChangeScreenParametersNotificationアプリケーションオブジェクトからを観察し、それを最新のものにする必要があります。

ちなみに、使っていない理由はあります-[NSWindow center]か?

于 2012-04-28T19:33:39.007 に答える