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

时间:2012-02-25 00:30:07

标签: objective-c macos cocoa

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

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

但是,当我将键盘焦点放在一个屏幕上的文本字段中,然后在同一文本字段中单击鼠标(重复)时,[[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]中的错误吗?我是否必须以某种方式强制重新计算?有没有其他方法可以获得具有键盘焦点的显示尺寸?

2 个答案:

答案 0 :(得分:6)

  

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

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

答案 1 :(得分:2)