2

我正在为 Unity3D 创建 Mac OS 插件(捆绑包)。如何拦截输入 cmd-f 组合(切换全屏模式)?我不能创建自己的窗口,我只能使用默认(mainWindow)。我尝试使用 NSNotificationCenter,但我需要停止事件,我不需要通知。我尝试创建 NSResponder 并将其添加到捕获输入事件,但有些东西不起作用。任何想法如何做到这一点?

NSWindow* window = [[NSApplication sharedApplication] mainWindow];
NSView* view = [window contentView];
NSResponder* oldresp = [view nextResponder];

MyResponder* myres = [MyResponder alloc];
[myres retain];

[view setNextResponder:myres]; 

@interface MyResponder : NSResponder
{
}
- (void)keyDown:(NSEvent *)theEvent;
@end

@implementation MyResponder

- (void)keyDown:(NSEvent *)theEvent
{
NSLog(@"%@",@"!KeyDown Event");
NSString *theArrow = [theEvent charactersIgnoringModifiers];
unichar keyChar = 0;
if ( [theArrow length] == 1 )
{
    keyChar = [theArrow characterAtIndex:0];
    if ( keyChar == NSModeSwitchFunctionKey  )
    {
        NSLog(@"%@",@"!!!___!!! GOT NSModeSwitchFunctionKey !!!");
        return;
    }
    NSLog(@"%@ %d",@"! Key:",keyChar);

}
[super keyDown:theEvent];
}
@end
4

1 回答 1

1

一种解决方案是不断检查用户是否已切换到全屏模式,如果有,请从您的程序中关闭全屏模式。这可能会暂时导致一些短暂的延迟或图形粗略,但它应该可以工作。

function Update ()
{
    if (Screen.fullScreen) {
       Screen.fullScreen = false;
    }
}

我不确定在程序切换之前拦截按键并忽略命令的方法。

请参阅有关在 Windows 上处理此问题的统一答案的相关帖子:http: //answers.unity3d.com/questions/544183/block-or-override-alt-enter-fullscreen.html

于 2013-11-12T16:52:57.167 回答