我刚刚碰到石英事件丝锥,这基本上让你捕获鼠标事件和执行自己的回调。
还没有尝试过了自己,但好像你应该能够检查在鼠标点击下跌和值
这里有条件的执行是一个example:中
//---------------------------------------------------------------------------
CGEventRef MouseTapCallback(CGEventTapProxy aProxy, CGEventType aType, CGEventRef aEvent, void* aRefcon)
//---------------------------------------------------------------------------
{
if(aType == kCGEventRightMouseDown) NSLog(@"down");
else if(aType == kCGEventRightMouseUp) NSLog(@"up");
else NSLog(@"other");
CGPoint theLocation = CGEventGetLocation(aEvent);
NSLog(@"location x: %d y:%d", theLocation.x, theLocation.y);
return aEvent;
}
//---------------------------------------------------------------------------
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
//---------------------------------------------------------------------------
{
CGEventMask theEventMask = CGEventMaskBit(kCGEventRightMouseDown) |
CGEventMaskBit(kCGEventRightMouseUp);
CFMachPortRef theEventTap = CGEventTapCreate(kCGSessionEventTap,
kCGHeadInsertEventTap,
0,
theEventMask,
MouseTapCallback,
NULL);
if(!theEventTap)
{
NSLog(@"Failed to create event tap!");
}
CFRunLoopSourceRef theRunLoopSource =
CFMachPortCreateRunLoopSource(kCFAllocatorDefault, theEventTap, 0);
CFRunLoopAddSource(CFRunLoopGetCurrent(),
theRunLoopSource,
kCFRunLoopCommonModes);
CGEventTapEnable(theEventTap, true);
}
可能重复[如何使用非矩形按钮创建透明窗口?](http://stackoverflow.com/questions/1527907/how-to-create-a-transparent-window-with-non-rectangular-buttons) – Ben 2012-06-21 10:14:11
The magic你正在寻找的词是“命中测试”。这就是窗口如何配合确定鼠标是否应该被视为在窗口之上的过程。 – Ben 2012-06-21 10:15:27
我建议你只为该矩形创建一个跟踪区域,并从视图中的响应者链中截取,然后将其委派给想要捕获所需事件的窗口。 – Arvin 2013-03-12 05:04:22