2010-01-02 7 views
0

Je veux dessiner un NSWindow qui ressemble à ceci:dessin personnalisé NSWindow

http://vibealicious.com/site/apps/notify/screenshots/mainUIFull.png

en ce qu'elle a un aspect NSWindow typique avec la barre inférieure et tel, mais au lieu d'une barre de titre à la En haut, je veux dessiner une petite flèche.

Existe-t-il un moyen simple de faire cela? Dois-je dessiner toute la fenêtre à la main (barre inférieure et tout)? Ou puis-je modifier légèrement la disposition NSWindow existante pour dessiner cette flèche en haut? Merci

Répondre

1

Vous pourriez fausser la barre de titre en utilisant une deuxième fenêtre enfant qui recouvre la section supérieure de la fenêtre et dessine juste la flèche. Sinon, vous devrez dessiner le tout vous-même.

+0

C'est à peu près ce que j'avais en tête. Y at-il un moyen d'obtenir le cadre de la barre de titre seulement (origine et taille) afin que je puisse redimensionner et positionner ma fenêtre enfant pour le couvrir? – indragie

+0

Vous pouvez utiliser la méthode de classe '+ contentRectForFrameRect: styleMask:' de NSWindow pour obtenir le contenu rect de la fenêtre. Vous pouvez ensuite facilement comparer cela avec le cadre de la fenêtre pour obtenir la taille de la barre de titre. –

+0

C'est ce que j'ai fini par faire, merci :) – indragie

1

Vous ne savez pas ce que vous voulez dire par simple façon de le faire, mais il n'est pas très difficile de créer votre propre sous-classe de fenêtre et de dessiner les commandes de la fenêtre vous-même. Une fenêtre d'enfant serait un peu exagérée pour cette situation.

Jetez un oeil à l'exemple de projet Round Transparent Window.

+0

Le seul problème avec tout dessiner soi-même est que si le style de la fenêtre change (par exemple dans une nouvelle version du système d'exploitation) alors votre fenêtre ne semblera pas à sa place. Bien sûr, cela s'applique également à la superposition de flèches. –

+0

Cela est vrai, et c'est une bonne raison d'examiner attentivement si une fenêtre personnalisée est appropriée à votre situation. – NSResponder

Questions connexes