Necesito hacer un winform pantalla completa. Esto es lo que he encontrado en internet.

1. Hook WinProc to catch WM_SYSCOMMAND

2. Check wParam == SC_MAXIMIZE and then

3. Set my windiw's attributes

Me.ResizeMode = ResizeMode.NoResize

Me.WindowStyle = WindowStyle.None

Me.WindowState = WindowState.Maximized

Soy bastante nuevo en vb.net y no sé cómo hacer los Pasos 1 y 2. Alguien puede darme un fragmento o me apunte en la dirección correcta?

Gracias giodamelio

InformationsquelleAutor giodamelio | 2011-01-10

2 Comentarios

  1. 6

    El truco es obtener la HwndSource y llame a su AddHook() método. Esto funciona:

    Imports System.Windows.Interop
    
    Class Window1
        Protected Overrides Sub OnSourceInitialized(ByVal e As System.EventArgs)
            MyBase.OnSourceInitialized(e)
            DirectCast(PresentationSource.FromVisual(Me), HwndSource).AddHook(AddressOf WndProc)
        End Sub
    
        Private Const WM_SYSCOMMAND As Integer = &H112
        Private Const SC_MAXIMIZE As Integer = &HF030
    
        Private Function WndProc(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wp As IntPtr, ByVal lp As IntPtr, ByRef handled As Boolean) As IntPtr
            If msg = WM_SYSCOMMAND AndAlso wp.ToInt32() = SC_MAXIMIZE Then
                Me.ResizeMode = ResizeMode.NoResize
                Me.WindowStyle = WindowStyle.None
                Me.WindowState = WindowState.Maximized
                handled = True
            End If
        End Function
    
    End Class

    El mismo código para un Winforms Forma:

    Public Class Form1
        Private Const WM_SYSCOMMAND As Integer = &H112
        Private Const SC_MAXIMIZE As Integer = &HF030
    
        Protected Overrides Sub WndProc(ByRef m As Message)
            If m.Msg = WM_SYSCOMMAND AndAlso m.WParam.ToInt32() = SC_MAXIMIZE Then
                Me.FormBorderStyle = FormBorderStyle.None
                Me.WindowState = FormWindowState.Maximized
                Return
            End If
            MyBase.WndProc(m)
        End Sub
    
        Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
            '' Restore window when the user presses Escape
            If Me.WindowState = FormWindowState.Maximized AndAlso keyData = Keys.Escape Then
                Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Sizable
                Me.WindowState = FormWindowState.Normal
            End If
            Return MyBase.ProcessCmdKey(msg, keyData)
        End Function
    
    End Class
    • Muchas gracias. Me puede dar un ejemplo de lo que yo llamaría para ocultar y mostrar la barra de tareas?
    • No lo has probado? Usted no tiene que ocultar la barra de tareas, una ventana sin bordes está permitido a la superposición de ella.
    • Su dándome un montón de errores.` ‘OnSourceInitialized’ no es un miembro de ‘System.Windows.Los formularios.Formulario»
    • Este es WPF código, no Winforms código. Eso es lo que pidió al uso de propiedades como ResizeMode y WindowStyle. Voy a editar mi post 🙁
    • Lo siento, no lo sabía, gracias
    • Post actualizado con Winforms código.
    • Muchas gracias por toda la ayuda. Funcionó muy bien 😀
    • Esto no funciona cuando usted haga doble clic en la barra de título.

  2. 0

    Lo siento esto es en C# (no VB), pero tal vez todavía es útil para usted:

    Aquí es un método que yo uso para una aplicación winforms que tiene un modo de pantalla completa:

        private void FullScreen(bool Enable)
        {
            SizeChanged -= FormMain_SizeChanged;
    
            SuspendLayout();
            if (Enable)
            {
                FormBorderStyle = FormBorderStyle.None;
                WindowState = FormWindowState.Maximized;
                if (settings.HideFullScreenCursor)
                    Cursor.Hide();
                menuStrip.Visible = false;
            }
            else
            {
                FormBorderStyle = FormBorderStyle.Sizable;
                WindowState = FormWindowState.Normal;
                if (settings.HideFullScreenCursor)
                    Cursor.Show();
                menuStrip.Visible = true;
            }
            ResumeLayout();
    
            SizeChanged += FormMain_SizeChanged;
        }

    Por supuesto, usted probablemente tendrá que modificar para satisfacer sus necesidades, pero esperemos que le da un punto de partida.

    • Gracias, Que está cerca. Pero al ejecutar el código de la barra de tareas de windows todavía está allí.
    • La barra de tareas, en ocasiones, mostrar por un segundo o dos, pero desaparece. (No estoy seguro de cuál es la causa de detenerse momentáneamente.)
    • En WinXP la barra de tareas no desaparece después de 5 minutos.
    • Interesante. He probado en Windows 7.

Dejar respuesta

Please enter your comment!
Please enter your name here