如何检测鼠标是否在菜单栏上?

时间:2012-06-16 17:02:01

标签: objective-c cocoa

我正在调用一些方法,需要在继续之前检测鼠标是否在(主)菜单栏上。如何定义这样的方法- (BOOL)isMouseOverMenu

我想确保鼠标实际位于菜单栏中,因此,当应用程序处于全屏状态时,它应该返回false,隐藏菜单,或者当鼠标位于菜单栏的相同坐标上时第二个没有菜单栏的显示器。如果它位于菜单栏中的任何其他项目上,它也应返回true,但不一定在弹出菜单中。

注意:触发时,我的窗口并不总是关键窗口。

1 个答案:

答案 0 :(得分:0)

根据NSMenu文档,菜单跟踪开始时会发布NSMenuDidBeginTrackingNotification

为此通知添加一个观察者,只要鼠标在菜单上,就会收到通知。

<强>更新

我不认为这可以做到。 NSMenuDidBeginTrackingNotification仅在用户单击菜单时发布,而不是仅在鼠标悬停在其上时发布。

NSMenu不是从NSResponder派生的,因此无法通过覆盖其中一种鼠标方法来检测它。

我认为这是一个错误,因为鼠标跟踪是在Apples文档中定义的,因为光标位于没有按下按钮的矩形区域上。如果没有其他解决方案,我会考虑提交错误报告。