如何测试鼠标是否在指定的窗口内?

时间:2012-06-30 15:01:36

标签: macos cocoa

使用Cocoa,如何检查鼠标是否在我的指定窗口内?我有以下代码检测它是否在窗口的范围内,但如果窗口关闭/隐藏但鼠标仍然在该矩形中,它会错误地打印它在里面。如果另一个窗口在它上面,它也会错误地说它在里面,但是鼠标位于我正在它下面测试的窗口区域内。

NSPoint mouse = [NSEvent mouseLocation];

BOOL mouseInside = NSPointInRect(mouse, self.window.frame);

if (!mouseInside) {
    NSLog(@"mouse isn't inside");
} else {
    NSLog(@"mouse is inside");
}

我尝试过这样的事情:

while ((screen = [screenEnum nextObject]) && !NSMouseInRect(mouse, [screen frame], NO));

if (screen != self.window.screen && mouseInside) {
    NSLog(@"mouse is inside.");
}

但它总会打印出“鼠标在里面”。

有什么想法吗?或者是设置追踪区域的唯一途径?

1 个答案:

答案 0 :(得分:7)

Freenode上的mikeash向我指出NSWindow's windowNumberAtPoint:

以下代码似乎可以根据需要运行:

if ([NSWindow windowNumberAtPoint:mouse belowWindowWithWindowNumber:0] != self.window.windowNumber) { 
    NSLog(@"mouse outside");
}