2011-07-19 8 views
2

私はNSButtonクラスを作成しました。ボタンをロールオーバーすると、mouseEnteredイベントとmouseExitedイベントがうまく検出されます。しかし、mouseDownイベントが発生するとすぐに、マウスが押されている限り、mouseEnteredイベントはマウスボタンが離されるまで呼び出されなくなります。mouseEnteredイベントが無効のときmouseDown(NSEvents Mac)

したがって、mouseDownイベントが呼び出されると、mouseEnteredイベントまたはMouseExitedイベントは呼び出されなくなり、最初のmouseDownを放棄するまで他のボタンを乗り越えるときにmouseDownも呼び出されません。

マウスがダウンしているときにマウスが入ったときを検出したいと思います。

ご理解いただきたいと思います。もっと詳しい情報があればお知らせください。

答えて

6

は、私はちょうど私のNSTrackingAreaOptionsにNSTrackingEnabledDuringMouseDragを追加する必要が判明します。 mouseEnteredイベントとmouseExitedイベントは、マウスでドラッグすると起動します。

+0

'NSTrackingArea'を使っていることをあなたの質問で言及することは良い考えでした。 –

+0

ごめんなさい。 –

+0

まだそれは私を助けました。 – charles

0

マウスの左ボタンが押し下げられると、ドラッグが開始されます。私が正しく覚えていれば、マウス移動イベントはドラッグ中に送信されません。それはおそらくmouseEnteredmouseExitedのメッセージを受け取らない理由の1つです。ただし、NSDraggingDestinationプロトコルを実装し、ドラッグするデータタイプの受信者としてビューを登録すると、代わりにdraggingEntereddraggingExitedというメッセージが表示されます。

Dragging Destinationsセクションののドラッグアンドドロッププログラミングのトピックを参照してください。

+0

私はこのことをどうやって解決するのかよくわかりません。そのすべては、異なるデータ型をドラッグすることに非常に重点を置いていました。私はデータをドラッグしていません。私は単に、マウスが新しいビューに入る時(nsbuttonsを横切ってドラッグする(マウスを下に))を検出するだけです。 –

4

NSButtonがマウスのダウンイベントを受信すると、private tracking loopと入力され、マウスが上がるまでポストされたすべてのマウスイベントを処理します。あなたは、マウスの位置に基づいて物事を行うために、独自のトラッキングループを設定することができます。

- (void) mouseDown:(NSEvent *)event { 

    BOOL keepTracking = YES; 
    NSEvent * nextEvent = event; 

    while(keepTracking){ 

     NSPoint mouseLocation = [self convertPoint:[nextEvent locationInWindow] 
              fromView:nil]; 
     BOOL mouseInside = [self mouse:mouseLocation inRect:[self bounds]]; 
     // Draw highlight conditional upon mouse being in bounds 
     [self highlight:mouseInside]; 

     switch([nextEvent type]){ 
      case NSLeftMouseDragged: 
       /* Do something interesting, testing mouseInside */ 
       break; 
      case NSLeftMouseUp: 
       if(mouseInside) [self performClick:nil]; 
       keepTracking = NO; 
       break; 
      default: 
       break; 
     } 

     nextEvent = [[self window] nextEventMatchingMask:NSLeftMouseDraggedMask | NSLeftMouseUpMask]; 
    } 
} 
関連する問題