Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 更改窗口边框颜色_Objective C_Macos_Cocoa - Fatal编程技术网

Objective c 更改窗口边框颜色

Objective c 更改窗口边框颜色,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我需要更改应用程序窗口周围的边框颜色 有人知道在哪里绘制窗口边框吗?我如何更改颜色/覆盖绘制边框的方法 我注意到Tweetbot的功能是: 从内存来看,我认为Tweetbot使用了完整的无边界窗口,并添加了窗口控件本身,但如果您想让AppKit仍然处理这些细节,还有另一种方法。如果将窗口设置为纹理窗口,则可以设置自定义背景颜色。此NSColor可以是使用+[NSColor colorWithPatternImage: 我很快就把它作为一个例子,只用纯灰作为填充,但是你可以在这张图片中画任何你喜欢

我需要更改应用程序窗口周围的边框颜色

有人知道在哪里绘制窗口边框吗?我如何更改颜色/覆盖绘制边框的方法

我注意到Tweetbot的功能是:


从内存来看,我认为Tweetbot使用了完整的无边界窗口,并添加了窗口控件本身,但如果您想让AppKit仍然处理这些细节,还有另一种方法。如果将窗口设置为纹理窗口,则可以设置自定义背景颜色。此NSColor可以是使用
+[NSColor colorWithPatternImage:

我很快就把它作为一个例子,只用纯灰作为填充,但是你可以在这张图片中画任何你喜欢的东西。然后,只需将NSWindow的类类型设置为纹理窗口类

SLFTexturedWindow.h

@interface SLFTexturedWindow : NSWindow
@end
SLFTexturedWindow.m

#import "SLFTexturedWindow.h"

@implementation SLFTexturedWindow

- (id)initWithContentRect:(NSRect)contentRect
                styleMask:(NSUInteger)styleMask
                  backing:(NSBackingStoreType)bufferingType
                    defer:(BOOL)flag;
{
    NSUInteger newStyle;
if (styleMask & NSTexturedBackgroundWindowMask) {
    newStyle = styleMask;
} else {
    newStyle = (NSTexturedBackgroundWindowMask | styleMask);
}

if (self = [super initWithContentRect:contentRect styleMask:newStyle backing:bufferingType defer:flag]) {

    [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(windowDidResize:)
                                                     name:NSWindowDidResizeNotification
                                                   object:self];

        [self setBackgroundColor:[self addBorderToBackground]];

        return self;
}

return nil;
}

- (void)windowDidResize:(NSNotification *)aNotification
{
    [self setBackgroundColor:[self addBorderToBackground]];
}

- (NSColor *)addBorderToBackground
{
    NSImage *bg = [[NSImage alloc] initWithSize:[self frame].size];
    // Begin drawing into our main image
[bg lockFocus];

[[NSColor lightGrayColor] set];
NSRectFill(NSMakeRect(0, 0, [bg size].width, [bg size].height));

    [[NSColor blackColor] set];

    NSRect bounds = NSMakeRect(0, 0, [self frame].size.width, [self frame].size.height);
    NSBezierPath *border = [NSBezierPath bezierPathWithRoundedRect:bounds xRadius:3 yRadius:3];
    [border stroke];

    [bg unlockFocus];

    return [NSColor colorWithPatternImage:bg];  
}

@end

在这里暗中试探一下:如果调用
[self.window.contentView setboordertype:NSNoBorder],然后查看它是否完全消除了边界?从这一点上说,你可以自己画。@sudorm rf这里没有运气:/p,我想那不管用。这里的主要问题是
NSWindow
实际上使用私有CGS函数在主要内容之外绘制此边框。除非使用无边框窗口,否则我似乎不记得有什么方法可以删除它。@sudorm rf看起来contentView的superview是一种称为NSThemeFrame的东西。我猜这就是画边框的地方,但不确定。不,事实上,根据我的判断,它在视图层次结构之外。实际上,它看起来像是导致窗口有两个边框,一个黑色的在里面,一个灰色的在外面。是的,看来你是对的。很抱歉,我无法看到灰色的边框,甚至近距离观察(视力差和视网膜显示)。看起来你得用无边框窗口的方法,自己画标题栏。我也有一个视网膜,我得把它拿到photoshop去检查另一个边框:P谢谢你的帮助。