我有一个全屏幕的透明窗口,显示在我的应用程序的主菜单上方。它有ignoresMouseEvents
设置为NO。为了尽管如此接收鼠标点击,我添加以下代码:-SendEvent的行为不如预期
[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:
。最后它将主窗口的ignoresMouseEvents
属性更改为NO。
但是,即使日志确实在点击主菜单栏时显示'点击',点击仍不起作用。如果我点击一个菜单项(例如“文件”菜单项),它将不会打开相应的菜单(在这种情况下是文件菜单)。
我在做什么错?
非常感谢你肯,很好的回答! – Fatso