0

MissionControlや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:]上記の定数の1つでウィンドウレベルを設定しますNSNormalWindowLevel
  2. LSUIElementInfo.plistで設定して、Dockなどに表示されないようにアプリケーションをエージェントアプリにします。
  3. ignoresMouseEventsウィンドウでに設定しますYES
于 2013-02-25T22:28:25.433 に答える