Как установить курсор в пользовательском NSView?

У меня есть пользовательский вид, который должен установить курсор в зависимости от того, где находится мышь. Я использую [NSCursor set] для установки курсора в обработчике mouseMoved:. Это работает в OS X 10.5, но в большинстве случаев не в 10.6. Иногда курсор меняется, но обычно нет.

Проблема в том, что мне нужно установить курсор в ответ на событие mouseMoved:, я не могу зарегистрировать прямоугольники курсора или использовать события NSTrackingArea и updateCursor:. Я работаю над интерфейсом Cocoa для браузера NetSurf. Движок ожидает события движения мыши от внешнего интерфейса. Если курсор находится над ссылкой или чем-то, что требует другого курсора, движок вызывает функцию из внешнего интерфейса, чтобы установить новый курсор.

Любые идеи о том, как заставить это работать на Snow Leopard?


person Sven    schedule 01.03.2011    source источник
comment
Вы видите мерцание курсора? Кажется, что курсор ненадолго меняется? Можете ли вы разработать пример приложения, демонстрирующего проблему? (Я могу успешно использовать [NSCursor set] в 10.6) Существуют и другие функции, которые можно вызывать для изменения курсора (например, устаревший SetCursor), используются ли какие-либо из них? Я мог бы предложить отслеживать все вызовы [набор NSCursor] — см. разработчик. apple.com/library/mac/#technotes/tn2004/tn2124.html   -  person ericg    schedule 02.03.2011
comment
Как (позиционно) ваш текущий код узнает, когда и на какой курсор перейти?   -  person trumpetlicks    schedule 02.06.2012


Ответы (2)


Обычно вы должны использовать CursorRects, чтобы другие представления не меняли ваш курсор. Но поскольку вы не можете этого сделать, вы можете предотвратить их вмешательство, отключив CursorRects на уровне окна, когда мышь входит в ваш вид. При выходе мыши из вашего представления включите обратные курсоры для окна.

person Radu Simionescu    schedule 01.12.2015

Просто используйте объект NSCursor с push и pop в mouseEnter и mouseExit.

person ERbittuu    schedule 01.12.2015