Как создать NSEvent типа NSScrollWheel? - PullRequest
14 голосов
/ 25 мая 2011

Я хотел бы создать (подделать) NSEvent типа NSScrollWheel.Существуют методы конструктора NSEvent для нескольких других типов NSEvents (mouseEvent, keyEvent, enterExitEvent, otherEvent), но ни один из них не позволяет мне установить, например, deltaX.

Ответы [ 3 ]

11 голосов
/ 26 мая 2011

NSEvent не предоставляет способа сделать это, но вы можете создать CGEvent и создать оболочку NSEvent вокруг него.Событие будет автоматически использовать текущее местоположение курсора.См. CGEventCreateScrollWheelEvent .Однако публикация этого события с использованием NSApplication postEvent:atStart: не работает (возможно, потому что у него нет определенного окна).Вы можете опубликовать CGEvent непосредственно в потоке событий или отправить NSEvent напрямую в метод scrollWheel: представления.

CGWheelCount wheelCount = 2; // 1 for Y-only, 2 for Y-X, 3 for Y-X-Z
int32_t xScroll = −1; // Negative for right
int32_t yScroll = −2; // Negative for down
CGEventRef cgEvent = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitLine, wheelCount, yScroll, xScroll);

// You can post the CGEvent to the event stream to have it automatically sent to the window under the cursor
CGEventPost(kCGHIDEventTap, cgEvent);

NSEvent *theEvent = [NSEvent eventWithCGEvent:cgEvent];
CFRelease(cgEvent);

// Or you can send the NSEvent directly to a view
[theView scrollWheel:theEvent];
2 голосов
/ 25 мая 2011

Вы можете создать CGEventRef с помощью CGEventCreateScrollWheelEvent и преобразовать его в NSEvent с помощью eventWithCGEvent:. Чтобы добавить информацию к CGEvent, используйте CGEventSetIntegerValueField - среди возможных полей есть kCGScrollWheelEventDeltaAxis1, ...2 и ...3.

1 голос
/ 17 августа 2016

Попробуйте следующий код:

  int scrollingDeltaX =... //custom value

//if you have some NSEvent *theEvent 
  CGEventRef cgEvent = CGEventCreateCopy(theEvent.CGEvent);

  CGEventSetIntegerValueField(cgEvent, kCGScrollWheelEventDeltaAxis2, scrollingDeltaX);

  NSEvent *newEvent = [NSEvent eventWithCGEvent:cgEvent];
  CFRelease(cgEvent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...