| NSScreen mainScreen | не обновляется, когда фокус клавиатуры / мыши переходит на другой монитор? - PullRequest
8 голосов
/ 25 февраля 2012

У меня есть глобальное приложение, которое сообщает информацию о текущем текстовом поле. Я настроил его так, что каждый раз, когда я щелкаю мышью, я запускаю:

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 ]

6 голосов
/ 25 февраля 2012

Это говорит о том, что экран с фокусом клавиатуры всегда является основным экраном. Я даю ему фокус клавиатуры и мыши. Так почему я получаю другой экран в 50% случаев?

Я знаю, что это не подходит, но технически это говорит о том, что главный экран - это экран, который содержит окно , которое имеет ключевой фокус. Таким образом, если у вас есть окно, охватывающее два экрана с текстовым полем, и его источник находится на экране 1, но текстовое поле находится на той части окна, которая находится на экране 2, и текстовое поле сфокусировано, основной экран будет все еще будет экран 1.

2 голосов
/ 26 марта 2012

Чтобы получить экран с мышью:

http://www.cocoabuilder.com/archive/cocoa/104529-current-mouse-screen.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...