我有一个全屏透明窗口,显示在我的应用程序主菜单上方。它已ignoresMouseEvents
设置为 NO。尽管如此,为了接收鼠标点击,我添加了以下代码:
[NSEvent addLocalMonitorForEventsMatchingMask:NSLeftMouseDownMask handler:^(NSEvent *event) {
[self click:event];
return event;
}];
每次用户在我的应用程序处于活动状态时单击时,click
都会调用一个方法:
- (BOOL)click:(NSEvent *)event {
NSPoint coordinate = [event locationInWindow];
float ycoord = coordinate.y;
float menuheight = [[NSApp mainMenu] menuBarHeight];
float windowheight = [[NSApp mainWindow] frame].size.height;
if (ycoord >= windowheight - menuheight && ![[NSApp mainWindow] ignoresMouseEvents]) {
[[NSApp mainWindow] setIgnoresMouseEvents:YES];
[NSApp sendEvent:event];
NSLog(@"click");
[[NSApp mainWindow] setIgnoresMouseEvents:NO];
return YES;
}
return NO;
}
如您所见,如果单击是在主菜单栏上,它将主窗口的属性更改为ignoresMouseEvents
YES - 之后它会调用sendEvent:
. NSApplication
最后,它将ignoresMouseEvents
主窗口的属性更改回 NO。
但是,即使单击主菜单栏时日志确实显示“单击”,单击也没有效果。例如,如果我单击一个菜单项(例如“文件”菜单项),它将不会打开相应的菜单(在本例中为文件菜单)。
我究竟做错了什么?