Jos*_*ane 3 macos objective-c nsevent mouseevent nsbutton
我创建了一个NSButton类,当滚动我的按钮时,它很高兴地检测到mouseEntered和mouseExited事件.但是只要mouseDown事件发生,只要鼠标停止,鼠标按钮被抬起就不再调用mouseEntered事件.
因此,当调用mouseDown事件时,不再调用mouseEntered或MouseExited事件,也不会在滚动其他按钮时调用mouseDown,直到我放开了初始mouseDown.
因此,我想检测鼠标何时进入鼠标的时间.
希望你理解,并希望你能帮助阻止这一点.如果有更多细节会有所帮助,请告诉我.
结果我只需要将NSTrackingEnabledDuringMouseDrag添加到我的NSTrackingAreaOptions.使用鼠标向下拖动时,mouseEntered和mouseExited事件现在会触发.
当NSButton接收到一个鼠标按下事件时,它进入一个私人跟踪循环,处理所有发布的鼠标事件,直到它得到一个鼠标。您可以设置自己的跟踪循环以根据鼠标位置执行操作:
- (void) mouseDown:(NSEvent *)event {
BOOL keepTracking = YES;
NSEvent * nextEvent = event;
while( keepTracking ){
NSPoint mouseLocation = [self convertPoint:[nextEvent locationInWindow]
fromView:nil];
BOOL mouseInside = [self mouse:mouseLocation inRect:[self bounds]];
// Draw highlight conditional upon mouse being in bounds
[self highlight:mouseInside];
switch( [nextEvent type] ){
case NSLeftMouseDragged:
/* Do something interesting, testing mouseInside */
break;
case NSLeftMouseUp:
if( mouseInside ) [self performClick:nil];
keepTracking = NO;
break;
default:
break;
}
nextEvent = [[self window] nextEventMatchingMask:NSLeftMouseDraggedMask | NSLeftMouseUpMask];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1844 次 |
| 最近记录: |