Mac OS低级窗口框架

时间:2018-06-13 19:47:46

标签: macos window appkit

目前我使用AppKit的NSWindow来创建窗口。问题是它有很多“默认行为”/限制。例如:miniaturize does not work如果没有标题栏(我也有无边框窗口,角半径等问题)。

据我所知,这种“默认行为”在大多数情况下都很好,但不适用于我的。

Mac OS是否有任何低级窗口API(C / C ++ / Obj-C)?我不需要任何视图,控件等等。我只需要 - 绘制区域和事件源。

1 个答案:

答案 0 :(得分:1)

您仍然可以使用NSWindow并在其之上实现自定义行为。实现此目的的最佳方法是创建自己的NSWindow子类并覆盖所需的行为。此示例代码创建了一个NSWindow,该标题没有标题栏,带有圆角并且可以被小型化:

@interface CustomWindow : NSWindow

@end

@implementation CustomWindow

- (instancetype)initWithContentRect:(NSRect)contentRect styleMask:(NSWindowStyleMask)style backing:(NSBackingStoreType)backingStoreType defer:(BOOL)flag
{
    NSWindowStyleMask effectiveStyle = style | NSWindowStyleMaskFullSizeContentView;
    self = [super initWithContentRect:contentRect styleMask:effectiveStyle backing:backingStoreType defer:NO];

    self.titleVisibility = NSWindowTitleHidden;
    self.titlebarAppearsTransparent = YES;

    self.movableByWindowBackground = YES;

    [self standardWindowButton:NSWindowCloseButton].hidden = YES;
    [self standardWindowButton:NSWindowZoomButton].hidden = YES;
    [self standardWindowButton:NSWindowMiniaturizeButton].hidden = YES;

    return self;
}