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