我正试图勾勒出一个类似于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];
}
答案 0 :(得分:1)
你已经到了一半了。您需要按照in the answer you've already found所述创建自定义窗口和内容视图。请注意,drawRect:
位于自定义视图中(您将在窗口子类中设置为窗口' s contentView
),而不是。从您的代码段开始,如果您已将其设置为这样,则不完全清楚。您现在应该有一个透明的轮廓窗口。
然后你需要:
-[NSWindow setLevel:]
设置为NSNormalWindowLevel
以上的常量之一。LSUIElement
,使您的应用程序成为代理应用程序,以便它不会出现在Dock等中。ignoresMouseEvents
设置为YES
。