iTunesミニプレイヤー(一例に過ぎない)は、再生/一時停止と音量コントロールが使用されているときにアプリケーションを前面に持ってこないクリックスルーをサポートしています。クリックスルーボタンとウィンドウを上げない
これはどのように行われますか?私はAppleのドキュメントを見、それを述べCocoa Event-Handling Guide, Event Dispatchで、上に行くには少し持ってきた
:アプリケーションキット(タイプNSAppKitDefined)によって定義され、その多く
いくつかのイベントを、する必要がありますウィンドウやアプリケーションオブジェクト自体によって制御されるアクションを実行します。これらのイベントの例は、アプリケーションのアクティブ化、非アクティブ化、隠蔽、および表示に関連するイベントです。 NSAppはディスパッチルーチンの早い段階でこれらのイベントをフィルタリングし、それを処理します。
だから、まだ私の限られた理解(How an Event Enters a Cocoa, Application)サブクラスNSApplicationのとオーバーライド - (void)sendEvent:(NSEvent *)theEvent
べきトラップすべてのマウスとキーボードイベントが、から、窓をクリックの上に上げています。したがって、NSApplicationによってイベントが表示される前にウィンドウが生成されるか、他に何かがありません。
私はマットギャラガーのDemystifying NSApplication by recreating itを見ましたが、残念ながらマットはイベントキューをカバーしていませんでした。それ以外は、私は困惑しています。
ありがとうございます、ありがとうございます。
追加する編集:は、彼は同じ問題とCocoaBuilder, capture first right mouse downのポストへのリンクについて語っているLloyd's Loungeのポストを見つけました。私は現在、そこに提供されているコードを試しています。[theEvent type]のNSLogを回して再起動すると、マウスの左ボタンのアクティビティが捕捉されています。
ウィンドウを左クリックすると、イベントタイプのシーケンス13, 1, 13
が生成されます。これは、NSAppKitDefined、NSLeftMouseDown、およびNSAppKitDefinedです。これらをフィルタリングしたり、どこに行くのかを見つけることはできますか?
acceptsFirstMouse:and acceptsFirstResponder:この問題で私の最初の試みは何の効果もありませんでした。しかし、ありがとう。 –