3

我正在使用quartz2d 制作我的第一个mac 应用程序,我想知道是否可以使背景透明。这意味着如果所有应用程序都将背景设置为透明,那么当它运行时,除了它背后的应用程序之外,你什么也看不到。

我觉得这是不可能的,但我想我还是会问。

4

1 回答 1

7

实际上,这是可能的。

您甚至可以让应用程序的完全透明窗口成为点击式。请参阅:在 Mac OS X 上绘制自定义窗口

构建透明窗口

制作自定义窗口从透明窗口开始。我将使用一个名为 RoundWindow 的自定义 NSWindow 子类。该子类的构造函数如下所示:

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

此构造函数对窗口所做的三处更改相当明显:

  • NSBorderlessWindowMask(没有标准窗口框架的窗口)
  • setOpaque:NO(这样窗口的任何部分都可以是透明的)
  • setBackgroundColor:[NSColor clearColor] (如果我们什么都不做,这将使窗口透明)

结果是一个透明的矩形窗口。可以直接调用此方法(如果在代码中创建窗口)。当从 NIB 加载窗口时,NIB 加载器也会调用它。

由于此窗口使用 NSBorderlessWindowMask 样式,我们必须重写 canBecomeKeyWindow 和 canBecomeMainWindow 方法以返回 YES。这些覆盖将允许窗口分别成为键盘焦点和主应用程序窗口。

来源: 在 Mac OS X 上绘制自定义窗口

于 2013-04-21T19:54:29.700 回答