2009-08-05 10 views
2

J'ai remarqué que dans Windows, si vous agrandissez une fenêtre, vous ne pouvez pas la redimensionner tant que vous ne l'avez pas encore agrandie. Cela semble être un comportement normal, donc je voudrais enlever mon pince de redimensionnement lorsque la fenêtre est agrandie.Test pour voir si une fenêtre est agrandie

Pour le moment, je ne trouve pas de propriété permettant de détecter si une fenêtre est agrandie, et bien que je puisse ajouter un booléen dans mon contrôleur, il n'attraperait pas nécessairement les demandes de maximisation du système d'exploitation. Donc, si vous connaissez un moyen fiable de tester si une fenêtre est agrandie s'il vous plaît faites le moi savoir. Sur une note connexe, j'utilise le chrome personnalisé, et lorsque je maximise une fenêtre, il chevauche la barre des tâches Windows. Je peux penser à des hacks pour détecter la taille d'écran disponible (en utilisant une fenêtre transparente du système chrome), mais il serait bon de connaître une meilleure méthode.

Merci

Rob

Répondre

2

J'ai compris comment cela peut être mieux fait grâce à quelques pointeurs de TheBrain.

Premièrement, vous devez regarder pour des événements de redimensionnement à la fenêtre de votre besoin de contrôler:

NativeApplication.nativeApplication.activeWindow.addEventListener(NativeWindowBoundsEvent.RESIZE, onWindowResize); 

poignée Puis cet événement pour décider si la fenêtre est agrandie ou non:

public function onWindowResize(event:NativeWindowBoundsEvent):void 
{ 
    if (event.afterBounds.height >= Screen.mainScreen.visibleBounds.height && event.afterBounds.width >= Screen.mainScreen.visibleBounds.width) 
     isMaximised = true; 
    else 
     isMaximised = false; 
} 

Vous pouvez ensuite Pour capturer ou créer votre propre bouton de maximisation, cliquez sur le code suivant:

  if (isMaximised) 
      { 
       var bounds:Rectangle = Screen.mainScreen.visibleBounds; 
       NativeApplication.nativeApplication.activeWindow.bounds = bounds; 
      } 
      else 
      { 
       NativeApplication.nativeApplication.activeWindow.bounds = new Rectangle(100, 100, 500, 600); 
      } 

Vous pouvez modifier les limites pour maximiser (ce qui est pratique pour les fenêtres chromées personnalisées avec des ombres) et vous pouvez également définir la taille par défaut de l'application si le bouton Agrandir est cliqué alors qu'il est déjà agrandi (ou ne fait rien).

J'ai eu des problèmes concernant l'affectation de la liste de redimensionnement de la fenêtre, et j'ai fini par la supprimer et l'ajouter à chaque fois que le bouton agrandir était cliqué. C'est un peu exagéré, mais pas trop mauvais.

+0

Jetez un coup d'œil à la réponse de Ril pour un moyen un peu plus propre de suivre l'état! – robmcm

+0

Je préfère cette réponse car elle n'est pas spécifique au MXML - l'ajout de l'écouteur à la fenêtre active m'a fait sortir – divillysausages

0

Pouvez-vous utiliser quelque chose like this pour accrocher l'événement maximize()?

+0

Oui cela devrait fonctionner, mais pas idéal. Vous pouvez également le construire dans votre contrôleur pour maximiser la fenêtre. Je ne suis pas sûr de la meilleure façon de résoudre le problème sur les fenêtres seulement ... – robmcm

1

Il est Win32 API d'appel qui va le faire pour vous:

BOOL IsZoomed (HWND hWnd);

+0

Je crains que vous ne puissiez pas accéder à cela via le moteur d'exécution AIR! – robmcm

+1

Oh, oui. Pardon. J'ai oublié de vérifier les tags en premier. –

0

Pour obtenir l'espace utilisable réel à partir de l'écran, utilisez la classe flash.display.Screen, ou vous pouvez utiliser le systemMaxSize() qui renvoie la plus grande taille de fenêtre autorisée par le système d'exploitation. Pour la maximisation, vous avez des événements que la fenêtre est en train de disperser lorsqu'elle est maximisée/minimisée/restaurée. Vous pouvez trouver plus d'informations sur les pages adobe (le lien sous systemMaxSize). Pour détecter si la fenêtre est agrandie ... Je ne pense pas qu'il existe une telle fonction (je peux me tromper), mais vous pouvez tester si la taille de l'application est égale à la taille de l'écran disponible, ce qui signifie qu'elle est agrandie. Ou crochet sur l'événement de redimensionnement qui est déclenché lorsque l'application est maximisée/minimisée/redimensionnée

+0

Je pense qu'en utilisant la fonction systemMaxSize() je peux faire ma propre commande de maximisation qui redimensionne juste la fenêtre. Cependant, je devrai également ajouter un petit gestionnaire quand un utilisateur cliquera sur le bouton de maximisation quand la taille de fenêtre == systemMaxSize() puis le reconstituera à la taille que la fenêtre était quand le bouton de maximisation a été cliqué le dernier. Cela ne devrait cependant pas poser trop de problèmes :) – robmcm

3

Dans votre application (MXML) sur la dans la méthode d'initialisation que vous appelez ussually sur creationComplete:

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
    creationComplete="init()" > 

Ajoutez le code suivant:

this.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGE, trackState); 

la méthode ressemble à ceci:

public function trackState(event:NativeWindowDisplayStateEvent):void 
    { 
     if (event.afterDisplayState == NativeWindowDisplayState.MAXIMIZED) 
     { 
      isMaximised = true; 
     } else { 
      isMaximised = false; 
     } 
    } 
+0

Merci! C'est un moyen plus propre de suivre l'état. – robmcm

0

Voici un moyen plus simple de vérifier si une fenêtre est agrandie:

if(stage.nativeWindow.displayState == NativeWindowDisplayState.MAXIMIZED) 
{ 
    //do something 
} 
0

Ce qui suit a fonctionné pour moi. Pas besoin de définir les écouteurs d'événements, ce code peut être utilisé pour vérifier l'état en temps réel de la fenêtre native:

if (nativeWindow.displayState == 'maximized') 
{ 
    trace('Maximized'); 
} 
else 
{ 
    trace('Minimized'); 
} 
Questions connexes