0

onMouseDragイベント中に何がドラッグされているかを判断する方法はありますか?具体的には、ウィンドウがドラッグされているかどうかを知りたいのですが。

私は次のことを試しました。アクセシビリティAPI:アクティブなウィンドウの初期位置を保存し、ドラッグ中にウィンドウの位置を再度照会して、値を比較します。この方法の問題は、Accessibility APIが、マウスの移動を停止するまで(マウスの主ボタンを押したまま)、ウィンドウの位置を更新しないことです。少し停止した後、マウスが再びドラッグを開始すると、位置が更新されます。

NSWindowDelegateをアクティブウィンドウにアタッチする:これはかなり新しいので、フォーカスされた/アクティブなウィンドウのNSWindowを見つける方法がわかりません。

前もって感謝します!

更新:Accessibility APIを使用してアクティブなウィンドウを取得し、AXObserverRefをアタッチしてkAXMovedNotificationを取得しました。CFRunLoopAddSourceを使用して、このオブザーバーを実行ループに追加しました。その結果、通知へのコールバックがキューに入れられ、ウィンドウのドラッグを停止した場合にのみ、通知への複数の呼び出しが発生します。このようにキューに入れられずにコールバックをすぐに起動して、ドラッグが停止したときではなく、ウィンドウがドラッグされているときにコードを実行できるようにする方法はありますか?

4

1 に答える 1

0

ウィンドウを移動している間、ウィンドウのステータスは更新されませんが、いつドラッグを開始し、いつドラッグを停止するかを知ることができます。

NSWindowDelegateプロトコルに準拠するデリゲートをウィンドウに設定すると、windowWillMove:を使用してウィンドウをドラッグしたときに通知を受け取ることができ、windowDidMove:を使用してドラッグを停止またはマウスボタンを離したときにも通知を受け取ることができます。

どちらのウィンドウがドラッグされているかを知りたい場合は、両方のメソッドがnotificationという名前のNSNotificationオブジェクトを受け取り、[notificationobject]またはnotification.objectを使用してウィンドウを取得できます。

于 2013-01-29T11:20:07.183 に答える