¿Cómo puede un programa de dotNet de Windows (o WPF) Aplicación en el fin de dejar que se va a pantalla completa en el monitor secundario?

InformationsquelleAutor user91295 | 2009-04-15

7 Comentarios

  1. 33

    Método de extensión para Maximizar una ventana al monitor secundario (si hay uno).
    No asumir que el monitor secundario del Sistema.Windows.Los formularios.Pantalla.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;
                }
            }
        }
    }
    • trabajo como un encanto…
  2. 9

    Para las aplicaciones WPF mirar este post. En última instancia, depende de cuando la WindowState se establece Maximizada. Si se establece en XAML o en la ventana del constructor (es decir, antes de que la ventana está cargado) siempre será maximizada en la pantalla principal. Si, por otro lado, se establece WindowState que Maximiza cuando la ventana está cargado – se va a maximizar en la pantalla en la que se maximiza antes.

    • ¡Gracias! Movimiento de la Restauración de la Posición de código de la ventana del constructor de la clase a la Carga controlador ayudado. La única cosa que debo agregar es que la clase de Ventana envía el LocationChanged de la notificación con la configuración predeterminada antes de enviar el Carga de notificación, por lo que usted debe saltar el LocationChanged de la notificación hasta restaurar la posición de la ventana en Carga controlador.
    • mucho mejor que el que más votos esta realidad se deshace de la barra de título, como se esperaba con cierto pantalla completa.
  3. 7

    Ver este codeproject artículo.

    El código no va a funcionar, pero por defecto del monitor principal. A cambio de esto, tendrás que reemplazar las llamadas a GetSystemMetrics se llama a GetMonitorInfo. El uso de GetMonitorInfo, usted puede conseguir el adecuado RECT para pasar a SetWindowPos.

    GetMonitorInfo le permite obtener el RECT para cualquier monitor.

    Hay un Artículo de MSDN en Posición de Aplicaciones en Configuraciones de Múltiples pantallas que podría ayudar a explicar las cosas un poco mejor.

  4. 7

    Me aviso de una respuesta en la que los defensores de la configuración de la posición en el evento Loaded, pero esto hace que parpadear cuando la ventana es la primera muestra normal, a continuación, maximizada. Si usted se suscribe a la SourceInitialized evento en su constructor y establecer la posición en que ahí va a manejar la maximización en monitores secundarios sin parpadeo estoy asumiendo WPF aquí

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

    Sustituto coords para cualquier en el monitor secundario

    • Sólo esta respuesta me ayudó.
    • Aceptado, funciona muy bien para el protector de pantalla
  5. 5
    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;
    }
    • Esto funciona, pero requiere una referencia a System.Windows.Forms.dll
  6. 0

    No está claro a partir de su pregunta, si usted está buscando una manera de mover la ventana al monitor secundario y, a continuación, ir a pantalla completa, o si usted está buscando para apoyar el modo de pantalla completa en cualquier monitor de la ventana (que puede ser primaria o secundaria).

    Si el después, para una ventana WPF, aunque no de la misma como modo de pantalla completa, puede eliminar las fronteras cuando está maximizada y restaurar la frontera cuando no se maximiza. No hay necesidad de comprobar que el monitor, etc. La visualización del título/title bar es controlado por el estado fronterizo.

        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);
        }

    De crédito va a Pavel por sus Formas de respuesta basado en la pregunta actual y para de Nir para su respuesta en esta pregunta.

  7. -1

    En WPF: Establecer la propiedad WindowState en condiciones Normales (no Maximixed) y crear el evento Cargado. En el caso de escribir este código:

    this.Left = SystemParameters.PrimaryScreenWidth + 100;
    this.WindowState = System.Windows.WindowState.Maximized;
    • Que asume el monitor secundario está a la derecha de la principal.

Dejar respuesta

Please enter your comment!
Please enter your name here