Centrer une fenêtre NSWindows

wiskywisky Membre
07:44 modifié dans API AppKit #1
Hello à  tous,

Je vous pose une colle ( :P c'est moi qui suis collé), comment faire pour centrer une fenêtre par rapport à  l'écran principal?

J'ai cherché, mais j'ai pas trouvé...

Merci d'avance  o:)

Réponses

  • BruBru Membre
    07:44 modifié #2
    dans 1139173002:

    J'ai cherché, mais j'ai pas trouvé...


    T'as vraiment cherché partout ?

    Dans NSWindow, tu as la méthode center...

    .
  • ChachaChacha Membre
    07:44 modifié #3
    Sinon il y a la technique : je récupère la taille de l'écran (voir NSScreen),  la taille de la fenêtre, et je calcule la position pour qu'elle soit centrée.

    +
    Chacha
  • wiskywisky Membre
    07:44 modifié #4
    NSWindow c'est le premier que j'ai fait!
    Je sui vraiment bigleux.
    Merci <3
  • 07:44 modifié #5
    Oui pour la solution proposée par chacha :
    <br />NSRect sRect = [[NSScreen mainScreen] frame];<br />NSRect wRect = [myWindow frame];<br />NSRect nRect = NSMakeRect(((sRect.size.width/2)-(wRect.size.width/2)), ((sRect.size.height/2)-(wRect.size.height/2)), wRect.size.width, wRect.size.height);<br />[myWindow setFrame:nRect display:YES animate:YES];<br />
    


    J'ai donc juste changer les coordonées de x et y (origine)
    pour x => largeur de l'ecran (sRect) divisée par 2, on trouve le centre de l'abscisse par rapport à  l'ecran. Pour maintenant trouvé le centre de l'abscisse en prenant en compte la window, on soustrait le cente abscisse de l'écran par le centre abscisse de la fenetre (largeur de la fenetre divisée par 2).
    Pour y => même procédé mais avec la hauteur.

    J'espère que je ne me suis pas trompé mais bon j'ai fait ça rapidement car je suis au lycée donc pas trop de temps disponible.
  • 07:44 modifié #6
    Attention, le puriste que je suis va te corriger sur un point: les guidelines apple suggèrent que les fenetres qui devraient être centrées ne doivent pas l'être par rapport au centre de l'écran, mais dans le tiers supérieur.

    [tt]NSRect nRect = NSMakeRect(((sRect.size.width/2)-(wRect.size.width/2)), ((sRect.size.height/3*2)-(wRect.size.height/3*2)), wRect.size.width, wRect.size.height);[/tt]
  • MathMath Membre
    07:44 modifié #7
    dans 1139223536:

    Attention, le puriste que je suis va te corriger sur un point: les guidelines apple suggèrent que les fenetres qui devraient être centrées ne doivent pas l'être par rapport au centre de l'écran, mais dans le tiers supérieur.

    [tt]NSRect nRect = NSMakeRect(((sRect.size.width/2)-(wRect.size.width/2)), ((sRect.size.height/3*2)-(wRect.size.height/3*2)), wRect.size.width, wRect.size.height);[/tt]


    Dans ce cas, autant prendre la methode center de NSWindow  ;D
  • Eddy58Eddy58 Membre
    07:44 modifié #8
    dans 1139222952:

    <br />NSRect sRect = [[NSScreen mainScreen] frame];<br />
    


    Pour ce genre de calculs il est plutôt conseillé d'utiliser la méthode visibleFrame, qui retranche les zones occupées par la barre de menus et le dock. :o
  • olofolof Membre
    07:44 modifié #9
    Et comment ça se passe avec deux écrans branchés ? On peut détecter sur quel écran se trouve la fenêtre principale de l'appli, par exemple ???
  • BruBru Membre
    07:44 modifié #10
    dans 1139252248:

    Et comment ça se passe avec deux écrans branchés ? On peut détecter sur quel écran se trouve la fenêtre principale de l'appli, par exemple ???


    La méthode screen de NSWindow renvoie [NSScreen mainScreen] si la fenêtre est majoritairement sur l'écran principal. Sinon, l'écran sur laquelle elle se trouve est parmi la liste retournée par [NSScreen screens].

    .
Connectez-vous ou Inscrivez-vous pour répondre.