NSWindow 总是在顶部(或不可见)
NSWindow is always on top ( or invisible )
我一直在从事一个项目,在该项目中,我根据 GLFW 的代码在 objective C 中手动创建一个浮动 NSWindow。问题是,每当我 运行 以下代码时, window 绝对位于所有内容之上。当切换到其他应用程序时,在我关闭我的应用程序之前,它仍然位于其他所有应用程序之上。我想要的是典型的 OS X window 行为,它将落后于 "active".
的其他 windows
问题似乎与我调用 [window orderFront:nil] 的线路有关。但是如果我不调用它,那么我的 window 根本就不会出现。有人知道是什么原因造成的吗?
@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];
}
}
}
我想我可能已经找到了解决办法。如果我添加这个:
[window setHidesOnDeactivate:true];
... 然后 window 的行为符合我的预期。这让我有点困惑,默认情况下它没有打开,但它似乎可以满足我的需要。
我一直在从事一个项目,在该项目中,我根据 GLFW 的代码在 objective C 中手动创建一个浮动 NSWindow。问题是,每当我 运行 以下代码时, window 绝对位于所有内容之上。当切换到其他应用程序时,在我关闭我的应用程序之前,它仍然位于其他所有应用程序之上。我想要的是典型的 OS X window 行为,它将落后于 "active".
的其他 windows问题似乎与我调用 [window orderFront:nil] 的线路有关。但是如果我不调用它,那么我的 window 根本就不会出现。有人知道是什么原因造成的吗?
@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];
}
}
}
我想我可能已经找到了解决办法。如果我添加这个:
[window setHidesOnDeactivate:true];
... 然后 window 的行为符合我的预期。这让我有点困惑,默认情况下它没有打开,但它似乎可以满足我的需要。