如何在可可中检测鼠标是否在窗外?

时间:2014-05-10 07:34:25

标签: objective-c macos cocoa

正如标题所说,我想知道是否可以检测鼠标按钮是否已关闭。我尝试将此代码放在我的app delegate.m中,但没有成功。

- (void)mouseDown:(NSEvent *)theEvent
{
    NSLog(@"hello world!");
}

快速谷歌搜索向我显示此方法仅适用于NSWindows。但是,大多数方法都可以检测鼠标位置是否被按下,如果是这样的话;我怎么能这样做?

3 个答案:

答案 0 :(得分:7)

您可以使用NSEvent addGlobalMonitorForEventsMatchingMask

在您的控件中定义:

id mouseEventMonitor;

-(id)init{

    mouseEventMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask | NSRightMouseDownMask | NSOtherMouseDownMask)
                                           handler:^(NSEvent *event){

        NSLog(@"theEvent->%@",event);

        //here you will receive the all mouse DOWN events
        if (event.modifierFlags & NSCommandKeyMask)
        {
          NSLog(@"theEvent1->%@",event);
        }else{
          NSLog(@"theEvent2->%@",event);
        }

    }];

    return self;
}

答案 1 :(得分:1)

可可事件监视器是可行的方法 您可以使用它们来跟踪视图层次结构之外的各种鼠标事件。

请查看Cocoa Event Handling Guide中的文档,了解有关如何使用它们的信息以及类似主题,如

答案 2 :(得分:0)

尽管您在问题中提到了 mouseDown 并接受了描述如何设置监视器的答案,但据我从问题的其余部分可以看出,您实际上并不需要一个事件按下鼠标按钮时触发,但只想检查鼠标按钮是否当前被按下。

NSEvent has a class property 可以用于此:

[NSEvent pressedMouseButtons]

这将返回当前按下的鼠标按钮的索引:

<块引用>

返回值 1 << 0 对应鼠标左键,1 << 1 对应鼠标右键,1<< n, n >=2 对应其他鼠标按键。