目标c -鼠标按下时禁用鼠标进入事件



我已经创建了一个NSButton类,当滚动到我的按钮时,它愉快地检测到mouseEntered和mouseExited事件。但是一旦mouseDown事件发生,只要鼠标按下,mouseenter事件就不再被调用,直到鼠标按钮被解除。

因此,当调用mouseDown事件时,不再调用mouseenter或MouseExited事件,在滚动到其他按钮时也不会调用mouseDown,直到我放开初始的mouseDown。

所以我想检测当我的鼠标进入,而鼠标是向下的

原来我只需要添加NSTrackingEnabledDuringMouseDrag到我的NSTrackingAreaOptions。鼠标向下拖动时触发mouseenter和mouseexit事件

当一个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];
    }
}

当鼠标左键按下时,拖动开始。如果我没记错的话,鼠标移动事件不会在拖拽过程中发送,这可能是你没有得到mouseEnteredmouseExited消息的原因之一。但是,如果您实现NSDraggingDestination协议并将视图注册为被拖动的数据类型的可能接收者,则您将获得draggingEntereddraggingExited消息。

请参阅拖放编程主题的拖放目的地部分。

相关内容

  • 没有找到相关文章

最新更新