Why NSWindow without styleMask:NSTitledWindowMask can not be keyWindow?

本小妞迷上赌 提交于 2019-11-26 14:06:56

问题


Problem: I have one window mainWindow and another childWindow added to mainWindow. childWindow is kind of WindowExt class. This class I define for catch method call [NSWindow becomeKeyWindow] that must be called after [childWindow makeKeyWindow]. If I create childWindow and try to make it keyWindow on next way:

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

method [WindowExt becomeKeyWindow] for childWindow is called - all fine, childWindowbecome keyWindow.

But if I create childWindow as

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

without NSTitledWindowMask, [WindowExt becomeKeyWindow] for childWindow is never called - childWindow doesn't become keyWindow.


回答1:


That’s a Cocoa design decision: windows without title or resize bar cannot become key window by default.

If you want a titleless window to be able to become a key window, you need to create a subclass of NSWindow and override -canBecomeKeyWindow as follows:

- (BOOL)canBecomeKeyWindow {
    return YES;
}



回答2:


you can set the style mask to NSBorderlessWindowMask in order to make it borderless



来源:https://stackoverflow.com/questions/4946342/why-nswindow-without-stylemasknstitledwindowmask-can-not-be-keywindow

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!