2012-02-25 14 views
7

私は現在のテキストフィールドについての情報を報告するグローバルアプリを持っています。私はそれを設定しているので、私は私のマウスをクリックするたびに、私が実行します。| NSScreen mainScreen |キーボード/マウスのフォーカスが他のモニターに移動しても更新されませんか?

NSLog(@"Screen:%f,%f", [[NSScreen mainScreen] frame].size.width, [[NSScreen mainScreen] frame].size.height); 

をしかし、私は一つの画面上のテキストフィールドにキーボードフォーカスを置いたときに、その同じテキストフィールドでマウスを(繰り返し)をクリックし、 [[NSScreen mainScreen] frame]は、画面の寸法が間違っていると報告することがよくあります。それは私に他のディスプレイの寸法を与えます。

アップルのドキュメントは言う:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSScreen_Class/Reference/Reference.html

メイン画面は必ずしも メニューバーが含まれているか、(0、0)で、その起源を持っている同じ画面ではありません。メイン画面には、現在キーボードを イベントを受信して​​いるウィンドウを含む 画面を指します。これは、 ユーザーが相互作用する可能性が最も高いため、メイン画面です。

これは、キーボードフォーカスのある画面は常にメイン画面であると言います。私はそれにキーボードフォーカスとマウスフォーカスを与えています。だから私はなぜ他の画面の50%の時間を取得していますか?これは、[NSScreen mainScreen]のバグ

ですか?私は何とか再計算を強制する必要がありますか?キーボードのフォーカスがあるディスプレイの寸法を取得する他の方法はありますか?

答えて

6

これは、キーボードフォーカスを持つ画面は常にメイン画面であることを述べています。私はそれにキーボードフォーカスとマウスフォーカスを与えています。それで、なぜ私は他の画面を50%の時間にしていますか?

私は、これはNITピッキングである知っているが、それは技術的には、メイン画面にキーフォーカスを持つウィンドウが含まれている画面であることを述べています。あなたは窓を持っているのであれば、テキストフィールドを持つ2つの画面にまたがると、ウィンドウの原点は、スクリーン1上にありますが、テキストフィールドが画面2上にある窓の部分にあり、そしてテキストフィールドがフォーカスされ、メイン画面の意志まだマウスを含む画面を取得するには、画面1.

+0

右は、私はあまりにも気づいたとダウン非常に小さいサイズにウィンドウのサイズを変更し、一つの画面に完全にそれを置くでした。それでも問題はあります。 – cksubs

+1

確認するには、[ウィンドウ画面]の結果を確認することもできます。 –

+0

あなたは[theWindowIamInteractingWith screen]を意味しますか?これはグローバルアプリです。ウィンドウは別のアプリに属しているので、私はその情報がないと思います。あなたが何か他のことを意味したら、私に知らせてください。 – cksubs

関連する問題