Aller en plein écran sur le moniteur secondaire

Comment programmer une application dotNet Windows (ou WPF) afin de la laisser passer en plein écran sur le moniteur secondaire?

Méthode d’extension pour Maximiser une fenêtre sur le moniteur secondaire (s’il en existe un). Ne suppose pas que le moniteur secondaire est System.Windows.Forms.Screen.AllScreens [2];

using System.Linq; using System.Windows; namespace ExtendedControls { static public class WindowExt { // NB : Best to call this function from the windows Loaded event or after showing the window // (otherwise window is just positioned to fill the secondary monitor rather than being maximised). public static void MaximizeToSecondaryMonitor(this Window window) { var secondaryScreen = System.Windows.Forms.Screen.AllScreens.Where(s => !s.Primary).FirstOrDefault(); if (secondaryScreen != null) { if (!window.IsLoaded) window.WindowStartupLocation = WindowStartupLocation.Manual; var workingArea = secondaryScreen.WorkingArea; window.Left = workingArea.Left; window.Top = workingArea.Top; window.Width = workingArea.Width; window.Height = workingArea.Height; // If window isn't loaded then maxmizing will result in the window displaying on the primary monitor if ( window.IsLoaded ) window.WindowState = WindowState.Maximized; } } } } 

Pour les applications WPF, consultez cet article . En fin de compte, cela dépend du moment où WindowState est défini sur Maximized. Si vous le définissez dans XAML ou dans le constructeur de la fenêtre (c’est-à-dire avant le chargement de la fenêtre), il sera toujours maximisé sur l’affichage principal. Si, d’autre part, vous définissez WindowState sur Maximized lorsque la fenêtre est chargée, elle sera optimisée sur l’écran sur lequel elle a été agrandie auparavant.

Voir cet article codeproject.

Le code présent fonctionnera, mais par défaut, votre moniteur principal. Pour changer cela, vous devrez remplacer les appels aux appels de GetSystemMesortingcs à GetMonitorInfo . À l’aide de GetMonitorInfo, vous pouvez obtenir le code RECT approprié à transmettre à SetWindowPos.

GetMonitorInfo vous permet d’obtenir le RECT pour n’importe quel moniteur.

Il existe un article MSDN sur les applications de positionnement dans les configurations multi-écrans qui pourrait vous aider à mieux comprendre les choses.

Je remarque une réponse qui préconise de définir la position dans l’événement Loaded, mais cela provoque un scintillement lorsque la fenêtre est affichée normalement, puis maximisée. Si vous vous abonnez à l’événement SourceInitialized dans votre constructeur et que vous définissez la position, il s’agira de maximiser sur des moniteurs secondaires sans scintillement – je suppose que WPF est ici

 public MyWindow() { SourceInitialized += MyWindow_SourceInitialized; } void MyWindow_SourceInitialized(object sender, EventArgs e) { Left = 100; Top = 50; Width = 800; Height = 600; WindowState = WindowState.Maximized; } 

Remplacez les coordonnées de n’importe quel autre sur votre moniteur secondaire

 private void Form1_Load(object sender, EventArgs e) { this.FormBorderStyle = FormBorderStyle.None; this.Bounds = GetSecondaryScreen().Bounds; } private Screen GetSecondaryScreen() { foreach (Screen screen in Screen.AllScreens) { if (screen != Screen.PrimaryScreen) return screen; } return Screen.PrimaryScreen; } 

Si vous cherchez un moyen de déplacer la fenêtre sur le moniteur secondaire, puis de passer en mode plein écran, ou si vous souhaitez simplement prendre en charge le mode plein écran quel que soit l’écran de la fenêtre (qui peut être primaire ou secondaire), ).

Si la dernière, pour une fenêtre WPF, mais pas tout à fait comme le mode plein écran, vous pouvez supprimer les bordures lorsqu’elle est agrandie et restaurer la bordure lorsqu’elle n’est pas agrandie. Pas besoin de vérifier pour quel moniteur, etc. L’affichage de la légende / barre de titre est contrôlé par l’état de la bordure.

  protected override void OnStateChanged(EventArgs e) { if (WindowState == WindowState.Maximized) { if (WindowStyle.None != WindowStyle) WindowStyle = WindowStyle.None; } else if (WindowStyle != WindowStyle.SingleBorderWindow) WindowStyle = WindowStyle.SingleBorderWindow; base.OnStateChanged(e); } 

Nous remercions Pavel pour sa réponse basée sur Forms dans la question en cours et à Nir pour sa réponse à cette question .

Dans WPF: Définissez la propriété WindowState dans Normal (pas Maximixed) et créez l’événement Loaded. En l’occurrence, écrivez ce code:

 this.Left = SystemParameters.PrimaryScreenWidth + 100; this.WindowState = System.Windows.WindowState.Maximized;