NSWindow总是处于最顶层(或隐形)

时间:2015-02-18 14:23:46

标签: objective-c cocoa window manual

我一直致力于一个项目,我根据GLFW的代码在目标C中手动创建一个浮动的NSWindow。问题是,每当我运行以下代码时,窗口都是绝对一切的。切换到其他应用时,在关闭我的应用之前,它仍然是其他所有应用。我想要的是典型的OS X窗口行为,它会落在其他窗口后面,而这些窗口已经过来了#34;活动"。

问题似乎与我调用[window orderFront:nil]的行相关。但是,如果我不打电话,那么我的窗口就不会出现了。有人知道可能导致这种情况的原因吗?

@interface MyApplicationDelegate : NSObject
@end

@implementation MyApplicationDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
    [NSApp stop:nil];
}

@end

@interface MyWindowDelegate : NSObject
@end

@implementation MyWindowDelegate

- (BOOL)windowShouldClose:(id)sender
{
    return NO;
}

@end


int main(int argc, const char * argv[]) {

[NSApplication sharedApplication];

MyApplicationDelegate* appDelegate = [[MyApplicationDelegate alloc] init];

[NSApp setDelegate:appDelegate];
[NSApp run];


NSRect contentRect = NSMakeRect(0, 0, 400, 400);
unsigned int styleMask = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask;

NSWindow* window = [[NSWindow alloc]
                     initWithContentRect:contentRect
                     styleMask:styleMask
                     backing:NSBackingStoreBuffered
                     defer:NO];

[window center];
[window setLevel:NSFloatingWindowLevel];

MyWindowDelegate* windowDelegate = [[MyWindowDelegate alloc] init];

[window setTitle:@"Manual"];
[window setDelegate:windowDelegate];

[window orderFront:nil];

while (true)
{
    for (;;)
    {
        NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask
                                            untilDate:[NSDate distantPast]
                                               inMode:NSDefaultRunLoopMode
                                              dequeue:YES];
        if (event == nil)
            break;

        [NSApp sendEvent:event];
    }
}
}

1 个答案:

答案 0 :(得分:1)

我想我可能找到了解决方案。如果我加上这个:

[window setHidesOnDeactivate:true];                      

...然后窗口就像我期望的那样。我有点难以置信,默认情况下这并没有开启,但它似乎做了我需要的事情。