我正在開發的應用程序需要能夠否決菜單欄點擊。有多種方式可以通知點擊菜單的時間(主要是NSMenu
通知和NSMenu
代表團),但就我所知,他們都不會讓您拒絕該操作。有沒有辦法告訴MainMenu的寬度?
我一直在想的解決方案是使用無邊界透明窗口,並將其覆蓋在菜單欄上。通過將窗口級別設置爲足夠高的值(在這種情況下爲NSStatusWindowLevel
),可以將其有效定位並在菜單欄上方繪製,以捕捉鼠標事件,否則會導致鼠標事件發生。那樣,我有我正在尋找的東西。
該解決方案的問題是,它也掩蓋狀態欄(右對齊,全局菜單項)的事件,我不需要或不想要這些事件。要解決這個問題,我需要能夠告訴狀態欄的範圍或菜單欄的範圍,但是我找不到任何明顯的方法。 NSApp.mainMenu.size
返回主菜單的大小,就好像它被放置在彈出式菜單中一樣,這顯然不是我需要的。
是否有更好的方法來屏蔽事件到菜單欄,或者有什麼方法可以找到它的寬度,但不包括狀態欄?
這可能聽起來很髒,而且是。我正在爲一箇舊平臺的應用程序級模擬器做這件事,當應用程序負責顯示菜單,當用戶點擊菜單欄時,它可以做任何事情,當它發生時,它可以做任何事情。
我擔心我可能不得不做那樣可怕的事情。雖然,我還發現菜單欄位於狀態欄下方,並且可以在兩者之間訂購透明窗口。這在我的TODO清單中並不是很高(我曾問過如果有一個簡單的解決方案,我可以在幾分鐘內完成),但我可能會研究這兩個選項。 – zneak 2013-04-28 02:45:04
@zneak:我不知道在菜單欄上方排列一個窗口,但在狀態欄下方是有用的,因爲相當多的窗口會在它下面,不僅僅是菜單欄,而且(AFAIK)無法保證陣列中的項目。你可以瀏覽數組,並自己挑選低於主菜單窗口級別的每個窗口,但將窗口放在菜單欄下方,並只要求窗口上方的窗口執行相同的操作。 – 2013-04-28 06:38:27