У меня есть полноэкранное прозрачное окно, которое отображается над основным меню моего приложения. Он имеет 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:
в NSApplication
. Наконец, он изменяет свойство ignoresMouseEvents
главного окна обратно на NO.
Однако, несмотря на то, что журнал нажимает «щелкнуть», когда нажата кнопка главного меню, клик не действует. Если я нажму на элемент меню (например, пункт меню «Файл»), например, он не откроет соответствующее меню (в этом случае меню файла).
Что я делаю неправильно?
спасибо, Ken, отличный ответ! – Fatso