我想自定义在OS X上绘制窗口标题栏的方式。具体来说,我想要做类似Twitterrific应用程序的事情,即使用自定义关闭按钮,没有最小/最大化按钮,并且窗口标题文本是右对齐的。与Twitterrific不同的是,我不想完全自定义绘制整个窗口(虽然我也没有完全排斥这种方式)。
我已经看过Cocoa With Love上的RoundWindow示例以及Apple提供的RoundTransparentWindow示例,但两者都不太合适。
我想自定义在OS X上绘制窗口标题栏的方式。具体来说,我想要做类似Twitterrific应用程序的事情,即使用自定义关闭按钮,没有最小/最大化按钮,并且窗口标题文本是右对齐的。与Twitterrific不同的是,我不想完全自定义绘制整个窗口(虽然我也没有完全排斥这种方式)。
我已经看过Cocoa With Love上的RoundWindow示例以及Apple提供的RoundTransparentWindow示例,但两者都不太合适。
-[NSWindow standardWindowButton:]
来自定义关闭/最小化/最大化按钮。一旦获取到按钮,您可以对其进行定位/删除等操作。@""
来自定义标题。然后,您可以添加一个 NSTextField
通过执行以下操作来绘制自己的标题: [[[NSWindow contentView] superview] addSubview:textField]
。cocoadev提供了更多关于如何最好地实现自己的NSWindow
子类的细节,包括对大部分常见陷阱的描述。
要点是创建一个NSWindow
子类,并在init方法中将其styleMask
设置为NSBorderlessWindowMask
:
- (id) initWithContentRect: (NSRect) contentRect
styleMask: (unsigned int) aStyle
backing: (NSBackingStoreType) bufferingType
defer: (BOOL) flag
{
if ((self = [super initWithContentRect: contentRect
styleMask: NSBorderlessWindowMask
backing: bufferingType
defer: flag]) == nil) { return nil; }
[super setMovableByWindowBackground:YES];
[super setLevel:NSNormalWindowLevel];
[super setHasShadow:YES];
// etc.
return self;
}
canbecomeKeyWindow
。- (BOOL) canBecomeKeyWindow
{
return YES;
}