微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创建NSScrollWheel类型的NSEvent?

如何解决如何创建NSScrollWheel类型的NSEvent?

| 我想构造(伪造)NSScrollWheel类型的NSEvent。还有一些其他类型的NSEvents(mouseEvent,keyEvent,enterExitEvent,otherEvent)的NSEvent构造函数方法,但是没有一个允许我设置,例如deltaX。     

解决方法

NSEvent没有提供执行此操作的方法,但是您可以创建CGEvent并在其周围创建NSEvent包装器。该事件将自动使用光标的当前位置。请参阅CGEventCreateScrollWheelEvent。但是,使用NSApplication的
postEvent:atStart:
发布此事件不起作用(可能是因为它没有定义窗口)。您可以将CGEvent直接发布到事件流,也可以将NSEvent直接发送到视图的ѭ1方法。
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];
    ,您可以使用
CGEventCreateScrollWheelEvent
创建一个
CGEventRef
,然后使用
eventWithCGEvent:
将其转换为
NSEvent
。要将信息添加到
CGEvent
中,请使用
CGEventSetIntegerValueField
,可能的字段包括
kCGScrollWheelEventDeltaAxis1
...2
...3
。     ,尝试以下代码:
  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);
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。