0

我试图勾勒出一个类似于 Mission Control 和 Exposé 的窗口。我创建了一个NSWindow透明的自定义,其轮廓与此问题类似,但我根本不希望用户与此窗口进行交互。

有没有办法做到这一点?

下面是我一直在调用的自定义 NSWindow

windowOutline = [[WindowOutline alloc] initWithContentRect:rect styleMask:1 backing:NSBackingStoreBuffered defer:false];
    [windowOutline makeKeyAndOrderFront:self];
    [windowOutline drawRect:rect];

- (id)initWithContentRect:(NSRect)contentRect
                styleMask:(NSUInteger)windowStyle
                  backing:(NSBackingStoreType)bufferingType
                    defer:(BOOL)flag
{
    self = [super
            initWithContentRect:contentRect
            styleMask:NSBorderlessWindowMask
            backing:bufferingType
            defer:flag];
    if (self)
    {
        [self setOpaque:NO];
        [self setBackgroundColor:[NSColor clearColor]];
    }
    return self;
}

- (void)drawRect:(NSRect)frame {
    frame = NSInsetRect(self.frame, 3.0, 3.0);

    [NSBezierPath setDefaultLineWidth:6.0];

    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:frame
                                                         xRadius:6.0 yRadius:6.0];
    [[NSColor redColor] set];
    [path stroke];
}
4

1 回答 1

1

你已经成功了一半。您需要按照您已经找到的答案中的描述创建自定义窗口和内容视图。请注意,这drawRect:是在自定义视图中(您将设置为窗口的contentView),而不是在您的窗口子类中。从您的代码片段来看,您是否以这种方式进行设置并不完全清楚。您现在应该有一个透明的轮廓窗口。

然后,您需要:

  1. 将窗口级别设置-[NSWindow setLevel:]为上述常量之一NSNormalWindowLevel
  2. LSUIElement通过在 Info.plist 中进行设置,使您的应用程序成为代理应用程序,使其不会出现在 Dock 等中。
  3. 设置ignoresMouseEvents在窗口上YES
于 2013-02-25T22:28:25.433 回答