如何拦截切换全屏模式

时间:2013-11-12 12:37:00

标签: xcode macos plugins unity3d fullscreen

我正在为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

1 个答案:

答案 0 :(得分:1)

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

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

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

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