Обработка Cmd-Q в приложении Cocoa (и пункт меню 'Quit Application' программно)

Я создал игровое приложение, которое имеет только одно окно. Приложение создано без помощи .xib-файлов, как описано здесь: Как мне создать графический интерфейс и программно реагировать на события Cocoa?

Сейчас я могу перехватывать стандартные события 'key up/down' в главном цикле приложения:

 NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES];
 NSEventType eventType = [event type];
 if (eventType == NSKeyDown)
 {
    my_uint32 keycode = [event keyCode];
    input::doSomeWork(keycode);
 }

Также я могу правильно выйти из приложения при нажатии красного крестика на окне с помощью следующего кода:

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
    g_myEngine.stop();
    return NSTerminateNow;
}

Но как мне:

a) перехватить, когда выбран пункт меню 'Quit MyApplicationName'?

b) обработать событие Cmd-Q?


обновить: Я добавил этот код:

id menubar = [[NSMenu new] autorelease];
id appMenuItem = [[NSMenuItem new] autorelease];
[menubar addItem:appMenuItem];
[NSApp setMainMenu:menubar];
id appMenu = [[NSMenu new] autorelease];
id appName = [[NSProcessInfo processInfo] processName];
id quitTitle = [@"Quit " stringByAppendingString:appName];
id quitMenuItem = [[[NSMenuItem alloc] initWithTitle:quitTitle action:@selector(terminate:) keyEquivalent:@"q"] autorelease];
[appMenu addItem:quitMenuItem];
[appMenuItem setSubmenu:appMenu];

и теперь приложение выходит из меню, но Cmd-Q по-прежнему не работает.

7
задан Community 23 May 2017 в 11:44
поделиться