我正在开发的应用程序需要能够否决菜单栏点击。有多种方式可以通知点击菜单的时间(主要是NSMenu
通知和NSMenu
代表团),但就我所知,他们都不会让您拒绝该操作。有没有办法告诉MainMenu的宽度?
我一直在想的解决方案是使用无边界透明窗口,并将其覆盖在菜单栏上。通过将窗口级别设置为足够高的值(在这种情况下为NSStatusWindowLevel
),可以将其有效定位并在菜单栏上方绘制,以捕捉鼠标事件,否则会导致鼠标事件发生。那样,我有我正在寻找的东西。
该解决方案的问题是,它也掩盖状态栏(右对齐,全局菜单项)的事件,我不需要或不想要这些事件。要解决这个问题,我需要能够告诉状态栏的范围或菜单栏的范围,但是我找不到任何明显的方法。 NSApp.mainMenu.size
返回主菜单的大小,就好像它被放置在弹出式菜单中一样,这显然不是我需要的。
是否有更好的方法来屏蔽事件到菜单栏,或者有什么方法可以找到它的宽度,但不包括状态栏?
这可能听起来很脏,而且是。我正在为一个旧平台的应用程序级模拟器做这件事,当应用程序负责显示菜单,当用户点击菜单栏时,它可以做任何事情,当它发生时,它可以做任何事情。
我担心我可能不得不做那样可怕的事情。虽然,我还发现菜单栏位于状态栏下方,并且可以在两者之间订购透明窗口。这在我的TODO清单中并不是很高(我曾问过如果有一个简单的解决方案,我可以在几分钟内完成),但我可能会研究这两个选项。 – zneak 2013-04-28 02:45:04
@zneak:我不知道在菜单栏上方排列一个窗口,但在状态栏下方是有用的,因为相当多的窗口会在它下面,不仅仅是菜单栏,而且(AFAIK)无法保证阵列中的项目。你可以浏览数组,并自己挑选低于主菜单窗口级别的每个窗口,但将窗口放在菜单栏下方,并只要求窗口上方的窗口执行相同的操作。 – 2013-04-28 06:38:27