0

他のことをトリガーするために、セッションのドラッグ中に keyDown イベントに応答する必要があるココア アプリケーションがあります。キーは修飾子だけではありませんが、任意の種類のキーにすることができます。

問題は、NSWindow.dragImage を呼び出してドラッグ セッションを開始すると、そのドラッグ操作中に keyDown イベントが発生しないことです。アプリケーション ウィンドウ (Finder からのファイルなど) に外部リソースをドラッグすると、正常に動作し、NSView.keyDown が呼び出されます。

これを回避する方法はありますか?ありがとうございます!

4

1 に答える 1

1

これはおそらく、ドラッグ セッションが「マウス トラッキング ループ」を使用してドラッグ イベントを処理しているためです。これにより、ドラッグ イベントを除く他のすべてのイベントがターゲットに送信されるのを効果的にブロックします。これについては、こちらのイベント ドキュメントを参照してください。

アイテムをアプリにドラッグしてもこれが行われない理由は、ドロップを受け取るアプリではなく、ドラッグ セッションを開始するアプリのみがイベント ブロックされるためです。

そうは言っても、これmouseDraggedを使用してイベント中にキーイベントをキャプチャしようとするnextEventMatchingMask:untilDate:inMode:dequeue:と、イベントキューにある可能性のあるキーイベントをポップオフできるはずです。

また、上記のリンクのドキュメントでは、マウスのドラッグ操作中のキー イベントの処理について説明しています。ただし、これらの例は、ドラッグ セッションを開始するときに特に適しているわけではありませんdragImage:at:offset:event:pasteboard:source:slideBack:performKeyEquivalent、言及されているように見たり、ドラッグ セッション中に NSWindowsendEvent:がイベントを受け取っているかどうかを確認したりすることもできます。

于 2013-05-24T18:37:12.923 に答える