Вопрос

Есть ли способ зарегистрировать глобальные события перемещения мыши в Какао? Я смог зарегистрироваться для участия в мероприятиях, используя Carbon InstallEventHandler(), но предпочел бы эквивалент Какао. Я искал NSNotificationCenter события, но, похоже, нет открытых имен событий (есть ли частные?)

Кроме того, есть ли способ использовать NSTrackingArea для представлений с clearColor фоном?

Приложение предназначено только для Snow Leopard.

Это было полезно?

Решение

В SnowLeopard есть новый метод класса NSEvent, который делает именно то, что вы хотите: + (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block. Вы & # 8217; вам захочется mask = NSMouseMovedMask.

Другие советы

Подобный вопрос уже задавался в StackOverflow: Как создать прозрачный дескриптор подкласса NSView события мыши?

Подведем итог: метод представления с открытым исходным кодом не работает. Кварцевые метчики - лучший ответ.

Вот несколько советов по работе с кранами:

<Ол>
  • Создайте кран с помощью CGEventTapCreate.
    a) Для параметра location (first) вы, вероятно, захотите использовать kCGSessionEventTap.
    б) Для параметра размещения (второго) вы, вероятно, захотите kCGHeadInsertEventTap.
    c) Для параметра маски события попробуйте (1 << kCGEventMouseMoved).

  • Создайте источник цикла выполнения с помощью CFMachPortCreateRunLoopSource, передавая событие в качестве второго параметра.

  • Добавьте источник цикла выполнения в цикл выполнения. Предполагая, что вы хотите добавить его в основной цикл выполнения, выполните: CFRunLoopAddSource(CFRunLoopGetMain(), sourceFromStep2, kCFRunLoopDefaultMode);

  • Включите запись события с помощью CGEventTapEnable

  • Если вы хотите отслеживать мышь, где бы она ни находилась, вам нужен CGEventTap. Какао-эквивалента нет. Если вы просто хотите отследить это в своем приложении, вам следует объяснить, почему вы оказались не в состоянии сделать это немного более тщательно.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top