2012-02-25 23 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採摘,但它在技術上說,主屏幕是包含窗口有重點的屏幕。所以如果你有一個跨越兩個屏幕的文本框,並且窗口的原點位於屏幕1上,但是文本框位於屏幕2上的窗口部分,並且文本框被聚焦,主屏幕將會還是畫面1.

+0

對,我也注意到了,並沒有到一個非常小的尺寸調整窗口的大小,並把它完全在一個屏幕上。仍然有問題。 – cksubs 2012-02-26 23:41:16

+1

要確認,您還可以檢查[窗口屏幕]的結果。 – 2012-02-27 06:48:23

+0

你的意思是[theWindowIamInteractingWith screen]?這是一個全球性的應用程序,該窗口屬於不同的應用程序,所以我不認爲我有這樣的信息。如果你的意思是別的,請告訴我。 – cksubs 2012-04-05 21:48:42

相關問題