概述系统窗口

时间:2013-02-25 20:52:08

标签: objective-c xcode cocoa nswindow

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

有没有办法做到这一点?

以下是我定制的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];
}

1 个答案:

答案 0 :(得分:1)

你已经到了一半了。您需要按照in the answer you've already found所述创建自定义窗口和内容视图。请注意,drawRect:位于自定义视图中(您将在窗口子类中设置为窗口' s contentView),而不是。从您的代码段开始,如果您已将其设置为这样,则不完全清楚。您现在应该有一个透明的轮廓窗口。

然后你需要:

  1. 将窗口级-[NSWindow setLevel:]设置为NSNormalWindowLevel以上的常量之一。
  2. 通过在Info.plist中设置LSUIElement,使您的应用程序成为代理应用程序,以便它不会出现在Dock等中。
  3. 将窗口上的ignoresMouseEvents设置为YES