NSWindow 和 setLevel,不能让“顶部”功能正常工作

Posted

技术标签:

【中文标题】NSWindow 和 setLevel,不能让“顶部”功能正常工作【英文标题】:NSWindow and setLevel, cant' get "on top" functionality working 【发布时间】:2022-01-07 03:39:01 【问题描述】:

当两个窗口靠得很近时,您可以捕捉它们(窗口管理器会自动更正窗口的位置/大小并将它们捕捉在一起,请参见附图)

NSWindows 有等级:

[Window setLevel:kCGBaseWindowLevelKey]

我希望窗口始终位于顶部并且可以捕捉。我可以通过以下方式实现“***”功能:

[Window setLevel:kCGScreenSaverWindowLevelKey];

但是,现在窗口不可对齐。我怎样才能同时拥有可捕捉和“在顶部”。我已经尝试了所有可能的窗口级别,只有一个级别是可捕捉的,即 kCGBaseWindowLevelKey

【问题讨论】:

【参考方案1】:

找到了答案。 两个窗口在同一位置,不同级别。

可以创建一个具有窗口级别 kCGBaseWindowLevelKey 的不可见窗口,并将其放在具有 kCGScreenSaverWindowLevelKey 级别的窗口的正下方。两个窗口在同一个地方,不同层次。

- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSWindowStyleMask)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation

    if (self = [super initWithContentRect:contentRect styleMask:NSWindowStyleMaskBorderless backing:NSBackingStoreBuffered defer:NO])
    
        [self setBackgroundColor:[NSColor clearColor]];
    
    
    return self;

【讨论】:

以上是关于NSWindow 和 setLevel,不能让“顶部”功能正常工作的主要内容,如果未能解决你的问题,请参考以下文章

如何让 OS X 设置 NSWindow 的初始位置

NSWindow 在每个应用程序的前面和菜单栏的前面 Objective-c Mac

如何将 NSWindow 带到前面和当前空间?

窗口NSWindow

关于顶功输入的疑问

无法编辑 NSWindow 的工具栏 - Cocoa