2010-06-23 5 views
3

J'essaie de sauvegarder mon état d'un System::Windows::Forms::Form lorsque mon application s'arrête. Je peux enregistrer la taille de la fenêtre, la position et l'état de la fenêtre sans aucun problème, mais si la fenêtre a été agrandie lors de sa fermeture, le membre ::Size enregistre la taille maximisée de la fenêtre.Comment obtenir la taille de fenêtre non maximisée d'un formulaire?

Y at-il un moyen d'enregistrer la taille non maximisée ou ai-je besoin d'intercepter l'événement on-maximiser et de l'enregistrer manuellement?

Répondre

2

Ce n'est pas facilement disponible, vous devez P/Invoke GetWindowPlacement. La meilleure approche consiste à enregistrer uniquement la taille de la fenêtre si le formulaire est dans l'état approprié. Par exemple:

protected override void OnResize(EventArgs e) { 
     if (this.WindowState == FormWindowState.Normal) 
      Properties.Settings.Default.WindowSize = this.Size; 
     base.OnResize(e); 
    } 
+0

GetWindowPlacement est grande, sauf qu'il enregistre des emplacements en coordonnées workingarea, que vous ne pouvez pas mélanger facilement avec les coordonnées ScreenArea (si vous le faites, la fenêtre se déplacera par la hauteur de la barre des tâches du système) – EricLaw

+0

plutôt Si vous persistez à conserver cette valeur à chaque redimensionnement, vous pouvez également, lors de l'arrêt, vérifier si this.WindowState! = FormWindowState.Normal et si elle est agrandie ou réduite, utilisez plutôt la propriété RestoreBounds. – EricLaw

+0

Il n'est pas constamment persisté. Pas jusqu'à ce que le programme appelle la méthode Save(). Le mieux est fait à la sortie du programme. –

Questions connexes