我想构造一个(假的) NSScrollWheel类型的NSEvent。有一些其他类型的NSEvents (mouseEvent、keyEvent、enterExitEvent、otherEvent)的NSEvent构造函数方法,但都不允许我设置,例如,deltaX。
发布于 2011-05-26 04:16:19
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];发布于 2011-05-26 03:54:58
您可以使用CGEventCreateScrollWheelEvent创建CGEventRef,并使用eventWithCGEvent:将其转换为NSEvent。要向CGEvent添加信息,请使用CGEventSetIntegerValueField --可能的fields包括kCGScrollWheelEventDeltaAxis1、...2和...3。
发布于 2016-08-17 16:45:15
尝试以下代码:
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);https://stackoverflow.com/questions/6126226
复制相似问题