2016-07-09 6 views
0

私は、左マウスでテキストを選択し、マウスの左ボタンを押しながら右マウスをクリックすると、アクションを実行しようとしていますbtnNSTextViewでマウスの左ボタンを押しながら右マウスを押し下げ、他のマウスを下ろす方法は?

私は現在、rightMouseDownotherMouseDownを無効にしていますが、ユーザーが左マウスを持っている間は呼び出されませんbtn。どうすれば達成できますか?

+0

左マウスを押したままユーザーが右クリックするのはなぜですか?これはほとんどのMacハードウェアでは不可能です。ユーザーがテキストを選択し、マウスを左クリックしてからもう一度右クリックしても十分ではないでしょうか? – mangerlahn

答えて

1

左マウスを押したままユーザーが右クリックするのはなぜですか?これはほとんどのMacハードウェアでは不可能です。ユーザーがテキストを選択し、マウス左ボタン&を解放してからもう一度右クリックすれば十分でしょうか?

しかし、場合、あなた本当にでこのような機能が必要です。私は同時にダウン&マウスを右、左、それかもしれない仕事を呼び出すためのハードウェアを持っていないとして、私は、これをテストしていません を。

レベルがさらに深くなり、CGEventオブジェクトで作業できます。 ここではどのように動作するかを示します。

応答するイベントを定義するビットマスクを作成します。

let eventMask = eventMask | (1 << CGEventType.leftMouseDown.rawValue) 
          | (1 << CGEventType.leftMouseUp.rawValue) 
          | (1 << CGEventType.rightMouseDown.rawValue) 
          | (1 << CGEventType.rightMouseUp.rawValue) 
          | (1 << CGEventType.otherMouseDown.rawValue) 
          | (1 << CGEventType.otherMouseUp.rawValue) 

self.eventTap = CGEvent.tapCreate(tap: .cghidEventTap, place: .headInsertEventTap, options: .defaultTap, eventsOfInterest: CGEventMask(eventMask), callback: { (proxy: CGEventTapProxy, type: CGEventType, event: CGEvent, userInfo: UnsafeMutablePointer<Void>?) -> Unmanaged<CGEvent>? in 
     // mySelf is self, if you need to refer to objects in this class 
     let mySelf = Unmanaged<MyClass>.fromOpaque(userInfo!).takeUnretainedValue() 

     if type == .leftMouseDown || type == .leftMouseUp { 
      // Left mouse down etc.. 

     } 

     return Unmanaged.passUnretained(event) 
    }, userInfo: UnsafeMutablePointer(Unmanaged.passUnretained(self).toOpaque())) 

最後に、返されたCFMachPortをrunLoopに追加する必要があります。

let runloopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0) 
CFRunLoopAddSource(CFRunLoopGetCurrent(), runloopSource, CFRunLoopMode.commonModes) 

これだけです。試してみてください。

関連する問題