私が開発しているアプリケーションは、メニューバーのクリックを拒否できる必要があります。メニューがクリックされたときに通知を受ける方法はいくつかあります (主にNSMenu
通知とNSMenu
委任) が、私が見る限り、アクションを拒否できる方法はありません。
私が考えていた解決策は、枠のない透明なウィンドウを使用して、メニュー バーに重ねることです。ウィンドウ レベルを十分に高い値 (NSStatusWindowLevel
この場合) に設定すると、ウィンドウは効果的にメニュー バーの上に配置および描画され、他の方法ではウィンドウに移動するマウス イベントをキャッチします。そうすれば、私は探しているものを持っています。
このソリューションの問題は、ステータス バー (右揃えのグローバル メニュー項目) のイベントもマスクしてしまうことです。この問題を解決するには、ステータス バーのスパンまたはメニュー バーのスパンのいずれかを知ることができる必要がありますが、どちらも明らかな方法が見つかりませんでした。NSApp.mainMenu.size
ポップアップ メニューにレイアウトされているかのようにメイン メニューのサイズを返しますが、これは明らかに必要なものではありません。
イベントをメニューバーにマスクするより良い方法はありますか、またはステータスバーを除いてその幅を見つける方法はありますか?
これはおそらくすべて非常に汚いように聞こえますが、そうです。ユーザーがメニューバーをクリックしたときにアプリケーションがメニューを表示する責任を負っていた古いプラットフォームのアプリケーションレベルのエミュレーターでこれを行っているため、それが発生したときに必要なことはほとんど何でもできます。