4

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.");
}

ただし、常に「マウスは中にあります」と表示されます。

何か案は?それとも、追跡エリアを設定することが唯一の方法ですか?

4

1 に答える 1

9

Freenodeのmikeashが私に指摘したNSWindow's windowNumberAtPoint:

次のコードは、必要に応じて機能するようです。

if ([NSWindow windowNumberAtPoint:mouse belowWindowWithWindowNumber:0] != self.window.windowNumber) { 
    NSLog(@"mouse outside");
}
于 2012-06-30T15:24:20.823 に答える