cocoadev bietet einige weitere Informationen darüber, wie Sie am besten Ihre eigene NSWindow
Unterklasse implementieren, komplett mit einer Beschreibung der meisten der häufigsten Fallstricke.
Der Kern ist es eine Unterklasse von NSWindow
zu erstellen, und legen Sie seine styleMask
-NSBorderlessWindowMask
in der init-Methode:
- (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;
}
Beachten Sie, dass Sie wahrscheinlich JA für canbecomeKeyWindow
, um zurückkehren sollte Ihr Fenster verhalten zu machen wie ein normales Fenster.
- (BOOL) canBecomeKeyWindow
{
return YES;
}
Anschließend können Sie eine benutzerdefinierte NSView Unterklasse erstellen, das gesamte Fenster mit einer Instanz der Klasse füllen, und dann alle entsprechenden Fenster aus dieser benutzerdefinierten Ansicht Zeichnung auszuführen.
Die ganze Sache kann ein bisschen schmerzhaft werden. Sie müssen die meisten normalen Fensterverhalten wie die Größenänderung durch Ziehen der unteren rechten Ecke neu implementieren.
Danke, Leibowitzn. Können Sie weitere Einzelheiten zum Einrichten des NSTextFields angeben? Wie stelle ich den Rahmen so ein, dass er richtig im Fenster positioniert ist und wo in meinem Code der beste Platz dafür wäre? – sam
FWIW, ich habe es in der watchFromNib-Methode des App-Controllers getan. Ich positionierte den Rahmen des Textfelds relativ zum Rahmen des Fensters. Dies ist wahrscheinlich nicht der beste Weg, um es zu tun, aber ich habe Benachrichtigungen verwendet, um zu wissen, wann das Fenster zum Hauptfenster wird und/oder damit die Farbe des Textes geändert wird. Nochmals vielen Dank für die Idee. – sam