Fenetre globale

SuperCed

Membre expert
Club iGen
20 Juin 2001
1 353
72
46
superced.rb38.eu
Comment fait-on une fenetre globale en Cocoa? C'est a dire une fenetre qui est toujours au premier plan, quelque soit l'application active?
Dois-je deriver NSWindow, et surcharger un selecteur? Si oui, lequel?

Merci
 
Utilise la méthode "- (void)setLevel:(int)newLevel" de la classe NSWindow.

Exemple :
<pre><font class="small">code:</font><hr>
// Cette ligne devrait placer la fenêtre "myWindow" à un niveau assez élevé (plus haut que le Dock)
[myWindow setLevel:NSStatusWindowLevel];
</pre><hr>
 
Nan, ca marcheu pas.
Quand je clique sur une fenetre d'une autre appli ou que je change d'appli dans le Dock, la fenetre passe en arriere plan.
 
La fenêtre ne sera plus la fenêtre active, mais elle restera toujours au premier plan. Si jamais, regarde l'exemple RoundTransparentWindow sur le site d'Apple (http://developer.apple.com/samplecode/Sample_Code/Cocoa/RoundTransparentWindow.htm).

Si ton but est d'interdire à l'utilisateur de switcher à une autre application (pour garder ta fenêtre toujours active), je ne sais pas si c'est possible en Cocoa. (certains jeux le font, mais sont généralement écrits en Carbon)
 
Alors le code que je t'ai donné devrait fonctionner !

Il faut juste bien comprendre qu'avec ce code, la fenêtre sera toujours au premier plan, mais sera "grisée" (et donc non-active) dès que tu passeras à une autre application. Essaie d'exécuter le programme RoundTransparentWindow sur le site d'Apple, et tu verras que la fenêtre reste toujours au premier plan.
 
Ca marche tres bien cette fois ci. J'ai eu un peu de mal au debut car j'essayer de faire ca sur un NSPanel. Sur un NSPanel, ca ne fonctionne pas, par contre, sur une NSWindow, pas de probleme, j'ai fait une sous classe et surcharge le constructeur. Tout marche.
Merci!