首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建NSScrollWheel类型的NSEvent?

如何创建NSScrollWheel类型的NSEvent?
EN

Stack Overflow用户
提问于 2011-05-25 22:40:13
回答 4查看 6.3K关注 0票数 15

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-26 04:16:19

NSEvent没有提供这样做的方法,但是您可以创建一个CGEvent并围绕它创建一个NSEvent包装器。事件将自动使用光标的当前位置。参见CGEventCreateScrollWheelEvent。但是,使用NSApplication的postEvent:atStart:发布此事件不起作用(可能是因为它没有定义窗口)。您可以将CGEvent直接发送到事件流,也可以将NSEvent直接发送到视图的scrollWheel:方法。

代码语言:javascript
复制
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];
票数 12
EN

Stack Overflow用户

发布于 2011-05-26 03:54:58

您可以使用CGEventCreateScrollWheelEvent创建CGEventRef,并使用eventWithCGEvent:将其转换为NSEvent。要向CGEvent添加信息,请使用CGEventSetIntegerValueField --可能的fields包括kCGScrollWheelEventDeltaAxis1...2...3

票数 2
EN

Stack Overflow用户

发布于 2016-08-17 16:45:15

尝试以下代码:

代码语言:javascript
复制
  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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6126226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档