我正在开发的应用程序需要能够否决菜单栏点击。有很多方法可以在单击菜单时收到通知(主要是NSMenu
通知和NSMenu
委托),但据我所知,它们都不会让您拒绝该操作。
我一直在考虑的解决方案是使用无边框透明窗口,并将其覆盖在菜单栏上。通过将窗口级别设置为足够高的值(NSStatusWindowLevel
在本例中),它可以有效地定位和绘制在菜单栏上方,捕获原本会转到它的鼠标事件。这样,我就有了我想要的东西。
该解决方案的问题在于它还掩盖了状态栏的事件(右对齐的全局菜单项),我不需要或不想否决这些事件。要解决这个问题,我需要能够分辨状态栏的跨度或菜单栏的跨度,但我发现两者都没有明显的方法。NSApp.mainMenu.size
返回主菜单的大小,就好像它在弹出菜单中一样,这显然不是我需要的。
有没有更好的方法来屏蔽菜单栏的事件,或者有没有办法找到它的宽度,不包括状态栏?
这可能听起来很肮脏,而且确实如此。我正在为旧平台的应用程序级模拟器做这件事,当用户单击菜单栏时,应用程序负责显示菜单,因此当这种情况发生时,它几乎可以做任何它想做的事情。