NSWindow прикреплено к курсору

Я хотел бы сделать пользовательскую панель, которая показывает масштаб в текущем положении курсора. Как, например, "Sip". Я искал в Интернете примеры, но не нашел ничего конкретного.

я нашел NSEvent"s addGlobalMonitorForEventsMatchingMask:handler: а также addLocalMonitorForEventsMatchingMask:handler: методы. Теперь я могу просто установить происхождение фрейма окна. Но я не уверен, что это действительно правильное решение.

Есть лучший способ сделать это? Может ли кто-нибудь указать мне пример кода?

1 ответ

Решение

Вот и все.

Вы также можете использовать функцию семейства Quartz Event Tap CGEventTap, так как она обеспечит немного большую скорость отклика во время таких событий, как переключение приложений Mac и Exposé, или Mission Control, или Dashboard. Однако его немного сложнее настроить, и в нем используется метод обратного вызова C, который немного сложнее использовать с некоторыми вещами.

В остальном, Quartz Event Taps - это то же самое, но, возможно, немного быстрее.

Если вы используете это, обязательно используйте функцию CGPoint CGEventGetUnflippedLocation(CGEventRef aCGEvent)

Как в: CGPoint eventLocation = CGEventGetUnflippedLocation(aCGEvent);

Это будет гарантировать, что ваши координаты у слева внизу, как и остальная часть Какао. В противном случае используйте его родного брата CGEventGetLocation() который по какой-то странной причине дерьмового именования не означает, что он возвращает перевернутые координаты. (но документы утверждают это)

Другие вопросы по тегам