| NSScreen主屏幕| 键盘/鼠标焦点转到其他显示器时不更新?

cks*_*ubs 8 macos cocoa objective-c

我有一个全球应用程序,报告有关当前文本字段的信息.我已将其设置为每次单击鼠标时都运行:

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

但是当我将键盘焦点放在一个屏幕上的文本字段中,然后在同一个文本字段中单击鼠标(重复)时,[[NSScreen mainScreen] frame]通常会报告错误的屏幕尺寸!它给了我另一个显示器的尺寸.

Apple文档说:

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

主屏幕不一定是包含菜单栏的相同屏幕或其原点为(0,0).主屏幕指的是包含当前正在接收键盘事件的窗口的屏幕.它是主屏幕,因为它是用户最有可能与之交互的屏幕.

这表示具有键盘焦点的屏幕始终是主屏幕.我给它键盘焦点和鼠标焦点.那么为什么我会在50%的时间内获得其他屏幕?

这是[NSScreen mainScreen]中的错误吗?我是否必须以某种方式强制重新计算?有没有其他方法来获得具有键盘焦点的显示器的尺寸?

Jon*_*ess 6

这表示具有键盘焦点的屏幕始终是主屏幕.我给它键盘焦点和鼠标焦点.那么为什么我会在50%的时间内获得其他屏幕?

我知道这是挑选,但从技术上讲,主屏幕是包含具有关键焦点的窗口的屏幕.因此,如果您有一个窗口跨越两个带有文本字段的屏幕并且窗口的原点位于屏幕1上,但是文本字段位于屏幕2上的窗口部分,并且文本字段被聚焦,则主屏幕将仍然是屏幕1.