有沒有辦法在可可中註冊全球鼠標移動事件?我能夠使用碳的InstallEventHandler()
註冊事件,但更喜歡Cocoa等價物。我已經尋找NSNotificationCenter
事件,但似乎沒有任何公開事件名稱(是否有私人的名稱?)全球鼠標在可可中移動事件
另外,有沒有辦法使用NSTrackingArea
爲clearColor
背景的意見?
該應用程序只有雪豹。
有沒有辦法在可可中註冊全球鼠標移動事件?我能夠使用碳的InstallEventHandler()
註冊事件,但更喜歡Cocoa等價物。我已經尋找NSNotificationCenter
事件,但似乎沒有任何公開事件名稱(是否有私人的名稱?)全球鼠標在可可中移動事件
另外,有沒有辦法使用NSTrackingArea
爲clearColor
背景的意見?
該應用程序只有雪豹。
在SnowLeopard中有一個新的類方法NSEvent
它正是你想要的:+ (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block
。你會想要mask = NSMouseMovedMask
。
如果你想跟蹤鼠標,不管它在哪裏,你想要一個CGEventTap。沒有可可等價物。如果你只是想在應用程序中跟蹤它,那麼你應該解釋爲什麼你發現自己無法做得更徹底。
事件水龍頭啓用事件水龍頭肯定要走的路。爲我完美工作。 – Leibowitzn 2009-10-27 03:10:41
這確實適合我,但Ben的回答完全正是我所期待的。 – 2009-10-28 01:06:04
類似的問題已經被問在計算器上: How to make a transparent NSView subclass handle mouse events?
總之,tansparent視圖的方法沒有奏效。石英事件水龍頭似乎是最好的答案。
這裏是具有抽頭的工作的一些提示:
與CGEventTapCreate
創建水龍頭。
a)對於位置(第一個)參數,您可能需要使用kCGSessionEventTap
。
b)對於放置(第二)參數,您可能需要kCGHeadInsertEventTap
。
c)對於事件掩碼參數,請嘗試(1 << kCGEventMouseMoved)
。
使用CFMachPortCreateRunLoopSource
創建一個運行循環源,傳遞事件觸發器作爲第二個參數。
將運行循環源添加到您的運行循環中。假設你希望將其添加到主運行循環,這樣做: CFRunLoopAddSource(CFRunLoopGetMain(), sourceFromStep2, kCFRunLoopDefaultMode);
與CGEventTapEnable
感謝您的幫助。我明白現在事件會好一些。不過,我結束了使用Ben的NSEvent方法。 – 2009-10-28 01:06:47
完美的,正是我所期待的。獎勵使用塊。 3行代碼,其他人需要20個。 – 2009-10-28 01:07:58