为什么NSWindow没有styleMask:NSTitledWindowMask不能是keyWindow?

时间:2011-02-09 14:40:43

标签: cocoa macos nswindow

问题: 我有一个窗口mainWindow,另一个childWindow添加到mainWindow。 childWindow有点WindowExt类。这个类我定义了必须在[NSWindow becomeKeyWindow]之后调用的catch方法调用[childWindow makeKeyWindow]。 如果我创建childWindow并尝试在下一个方向将其设为keyWindow:

WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:addedWindowRect
                           styleMask:NSBorderlessWindowMask | NSTitledWindowMask
                             backing:NSBackingStoreBuffered 
                               defer:NO];
[mainWindow addChildWindow:childWindow ordered:NSWindowAbove];
[childWindow makeKeyWindow];
调用[WindowExt becomeKeyWindow]的方法childWindow - 一切正常,childWindow成为keyWindow。

但是如果我创建childWindow为

WindowExt *childWindow = [[WindowExt alloc] initWithContentRect:addedWindowRect
styleMask:NSBorderlessWindowMask 
backing:NSBackingStoreBuffered
defer:NO];
[mainWindow addChildWindow:childWindow ordered:NSWindowAbove];
[childWindow makeKeyWindow];

没有NSTitledWindowMask[WindowExt becomeKeyWindow]的{​​{1}}永远不会被调用 - childWindow不会成为keyWindow。

2 个答案:

答案 0 :(得分:24)

这是一个Cocoa设计决定:windows without title or resize bar cannot become key window by default

如果您希望无标题窗口能够成为关键窗口,则需要创建NSWindow的子类并覆盖-canBecomeKeyWindow,如下所示:

- (BOOL)canBecomeKeyWindow {
    return YES;
}

答案 1 :(得分:0)

您可以将样式蒙版设置为NSBorderlessWindowMask以使其无边框