【发布时间】:2012-02-06 02:30:35
【问题描述】:
我创建了一个只有一个窗口的游戏应用程序。应用程序是在没有 .xib 文件帮助的情况下创建的,如下所述:How can I create a GUI and react to Cocoa events programmatically?
现在,我可以在应用程序的主循环中捕获标准的“向上/向下”事件:
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) 在选择菜单项“退出 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 仍然不起作用。
【问题讨论】:
标签: objective-c macos cocoa