如何在OSX中更改NSWindow标题栏的颜色

Muruganandham k

在长时间搜索NSWindow标题栏颜色和标题颜色之后,我找到了一个简单的绘图解决方案。我发布这个分享我的知识。

Muruganandham k

NSView用名称子类aMyTitleView并添加以下代码

- (void)drawString:(NSString *)string inRect:(NSRect)rect {
    static NSDictionary *att = nil;
    if (!att) {
        NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
        [style setLineBreakMode:NSLineBreakByTruncatingTail];
        [style setAlignment:NSCenterTextAlignment];
        att = [[NSDictionary alloc] initWithObjectsAndKeys: style, NSParagraphStyleAttributeName,[NSColor whiteColor], NSForegroundColorAttributeName,[NSFont fontWithName:@"Helvetica" size:12], NSFontAttributeName, nil];
        [style release];

    }

    NSRect titlebarRect = NSMakeRect(rect.origin.x+20, rect.origin.y-4, rect.size.width, rect.size.height);


    [string drawInRect:titlebarRect withAttributes:att];
}


- (void)drawRect:(NSRect)dirtyRect
{
    NSRect windowFrame = [NSWindow  frameRectForContentRect:[[[self window] contentView] bounds] styleMask:[[self window] styleMask]];
    NSRect contentBounds = [[[self window] contentView] bounds];

    NSRect titlebarRect = NSMakeRect(0, 0, self.bounds.size.width, windowFrame.size.height - contentBounds.size.height);
    titlebarRect.origin.y = self.bounds.size.height - titlebarRect.size.height;

    NSRect topHalf, bottomHalf;
    NSDivideRect(titlebarRect, &topHalf, &bottomHalf, floor(titlebarRect.size.height / 2.0), NSMaxYEdge);

    NSBezierPath * path = [NSBezierPath bezierPathWithRoundedRect:self.bounds xRadius:4.0 yRadius:4.0];
    [[NSBezierPath bezierPathWithRect:titlebarRect] addClip];



    NSGradient * gradient1 = [[[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:0.0 alpha:1.0] endingColor:[NSColor colorWithCalibratedWhite:1 alpha:1.0]] autorelease];
    NSGradient * gradient2 = [[[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:1 alpha:1.0] endingColor:[NSColor colorWithCalibratedWhite:0 alpha:1.0]] autorelease];

  [path addClip];


//    [[NSColor colorWithCalibratedWhite:0.00 alpha:1.0] set];
//   [path fill];


   [gradient1 drawInRect:topHalf angle:270.0];
    [gradient2 drawInRect:bottomHalf angle:270.0];

    [[NSColor blackColor] set];
    NSRectFill(NSMakeRect(0, -4, self.bounds.size.width, 1.0));


    [self drawString:@"My Title" inRect:titlebarRect];


}

在appDelegate中,导入类MyTitleView并添加以下代码

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    NSRect boundsRect = [[[_window contentView] superview] bounds];
    BlackTitlebarView * titleview = [[BlackTitlebarView alloc] initWithFrame:boundsRect];
    [titleview setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];

    [[[_window contentView] superview] addSubview:titleview positioned:NSWindowBelow relativeTo:[[[[_window contentView] superview] subviews] objectAtIndex:0]];
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在GNOME中更改活动窗口标题栏的颜色?

来自分类Dev

如何在Windows终端中更改标题栏颜色(从ms store安装)

来自分类Dev

更改颜色标题栏

来自分类Dev

如何更改QMainWindow边框和标题栏的颜色?

来自分类Dev

如何仅更改标题栏颜色KDE Plasma

来自分类Dev

在Chrome打包的应用中更改标题栏颜色

来自分类Dev

如何获得NSWindow标题栏的颜色,尤其是在窗口失去焦点时?

来自分类Dev

如何在Lollipop或Android M上最新的Android Chrome版本中更改标题栏和地址栏的TEXT颜色?

来自分类Dev

在GNU Emacs OSX中,如何隐藏标题栏?

来自分类Dev

vscode 扩展更改标题栏的颜色

来自分类Dev

如何在Windows 8.1中获取WPF窗口的标题栏颜色?

来自分类Dev

如何在Windows 10中更改窗口标题栏大小

来自分类Dev

如何在JavaFX手风琴标题栏中更改光标

来自分类Dev

如何在Gnome 3.20上的标准GTK应用程序和带有标题栏/ CSD的应用程序中更改标题栏的高度

来自分类Dev

如何在Android的标题栏中隐藏应用名称?

来自分类Dev

如何在Android中删除标题栏?

来自分类Dev

如何在标题栏中向右扩展输入字段

来自分类Dev

如何在UWP应用中隐藏/折叠标题栏?

来自分类Dev

如何在Firefox 29中显示完整的标题栏?

来自分类Dev

如何在Java中创建标题栏菜单

来自分类Dev

如何在 20.04 中隐藏窗口标题栏?

来自分类Dev

在Visual Studio Code的标题栏和状态栏中更改图标颜色

来自分类Dev

如何更改标题栏上的图标?

来自分类Dev

如何更改标题栏的 bgimage 比例

来自分类Dev

NSWindow的自定义标题栏

来自分类Dev

NSWindow标题栏自定义

来自分类Dev

NSWindow +标题栏没有圆角?

来自分类Dev

如何在离子隐藏标题栏?

来自分类Dev

如何将Windows 10标题栏颜色更改回白色?

Related 相关文章

  1. 1

    如何在GNOME中更改活动窗口标题栏的颜色?

  2. 2

    如何在Windows终端中更改标题栏颜色(从ms store安装)

  3. 3

    更改颜色标题栏

  4. 4

    如何更改QMainWindow边框和标题栏的颜色?

  5. 5

    如何仅更改标题栏颜色KDE Plasma

  6. 6

    在Chrome打包的应用中更改标题栏颜色

  7. 7

    如何获得NSWindow标题栏的颜色,尤其是在窗口失去焦点时?

  8. 8

    如何在Lollipop或Android M上最新的Android Chrome版本中更改标题栏和地址栏的TEXT颜色?

  9. 9

    在GNU Emacs OSX中,如何隐藏标题栏?

  10. 10

    vscode 扩展更改标题栏的颜色

  11. 11

    如何在Windows 8.1中获取WPF窗口的标题栏颜色?

  12. 12

    如何在Windows 10中更改窗口标题栏大小

  13. 13

    如何在JavaFX手风琴标题栏中更改光标

  14. 14

    如何在Gnome 3.20上的标准GTK应用程序和带有标题栏/ CSD的应用程序中更改标题栏的高度

  15. 15

    如何在Android的标题栏中隐藏应用名称?

  16. 16

    如何在Android中删除标题栏?

  17. 17

    如何在标题栏中向右扩展输入字段

  18. 18

    如何在UWP应用中隐藏/折叠标题栏?

  19. 19

    如何在Firefox 29中显示完整的标题栏?

  20. 20

    如何在Java中创建标题栏菜单

  21. 21

    如何在 20.04 中隐藏窗口标题栏?

  22. 22

    在Visual Studio Code的标题栏和状态栏中更改图标颜色

  23. 23

    如何更改标题栏上的图标?

  24. 24

    如何更改标题栏的 bgimage 比例

  25. 25

    NSWindow的自定义标题栏

  26. 26

    NSWindow标题栏自定义

  27. 27

    NSWindow +标题栏没有圆角?

  28. 28

    如何在离子隐藏标题栏?

  29. 29

    如何将Windows 10标题栏颜色更改回白色?

热门标签

归档