【发布时间】:2016-01-26 07:05:52
【问题描述】:
当菜单栏变为隐藏或可见时,Cocoa 有没有办法接收通知(或类似的东西)?我试着环顾四周,并没有找到关于这个主题的任何信息。
谢谢
【问题讨论】:
标签: objective-c cocoa menubar
当菜单栏变为隐藏或可见时,Cocoa 有没有办法接收通知(或类似的东西)?我试着环顾四周,并没有找到关于这个主题的任何信息。
谢谢
【问题讨论】:
标签: objective-c cocoa menubar
我通过使用 Carbon 的菜单事件处理程序解决了这个问题。
我在kEventClassMenu 类下注册了事件kEventMenuBarHidden 和kEventMenuBarShown。
【讨论】:
(可选)注意 NSStatusBarWindow 类对象的 (Cocoa) 通知和类似通知
在菜单栏显示或隐藏时得到通知。
【讨论】:
NSStatusBarWindow 实施通知;我找不到那个类。
NSStatusBarWindow 以识别类……比较字符串没有害处:-)
NSStatusBarWindow ?我只能在我的应用程序窗口上收到通知。 (感谢您的所有帮助)
如果只需要菜单栏的当前状态,另一种方法是使用visibleFrame property of NSScreen:
返回的矩形始终基于当前的用户界面设置,不包括当前停靠栏和菜单栏占用的区域。
但是,如果您需要在菜单栏可见性更改时收到通知,这本身是不够的。
【讨论】:
我认为正确的方法是使用键值观察 (KVO) 来观察应用程序对象的 presentationOptions 或 currentSystemPresentationOptions 属性(NSApp 或 [NSApplication sharedApplication])。当它发生变化时,检查它的值是否包含NSApplicationPresentationHideMenuBar 或NSApplicationPresentationAutoHideMenuBar。如果是,则隐藏菜单(或在光标不在主屏幕顶部附近时隐藏。
presentationOptions 和 currentSystemPresentationOptions 之间的区别在于您是否对调用应用程序是否隐藏了其菜单栏或活动应用程序(可能是另一个应用程序)是否隐藏其菜单栏感兴趣。后者表示用户是否可以看到任何菜单栏。
【讨论】: