2011-01-10 13 views
3

Ich muss einen Winform Vollbild machen. Das habe ich online gefunden.Making Winforms Fullscreen

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 

Ich bin ziemlich neu in vb.net und weiß nicht, wie 1 oder 2 tun Schritte Kann mir jemand einen Ausschnitt geben oder mich in der richtigen Richtung?

Dank giodamelio

Antwort

6

Der Trick besteht darin, die HwndSource zu erhalten und ihre AddHook() - Methode aufzurufen. Dies funktioniert:

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 

Der gleiche Code für eine WinForms Form:

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 
+0

Vielen Dank. Können Sie mir ein Beispiel dafür geben, wie ich die Taskleiste ein- und ausblenden würde? – giodamelio

+0

Haben Sie es versucht? Sie müssen die Taskleiste nicht ausblenden, ein randloses Fenster darf sie überlappen. –

+0

Sein gibt mir viel errors.' ‚OnSourceInitialized‘ ist kein Mitglied von ‚System.Windows.Forms.Form'' – giodamelio

0

Leider dies in C# (nicht VB), aber vielleicht ist es immer noch nützlich für Sie:

Hier ist eine Methode, die ich für eine WinForms-Anwendung verwenden, die einen Vollbild-Modus hat:

Natürlich werden Sie wahrscheinlich ändern möchten, um es Ihren Bedürfnissen anzupassen, aber hoffentlich gibt es Ihnen einen Ausgangspunkt.

+0

Danke, das ist in der Nähe. Aber wenn ich diesen Code ausführe, ist die Windows-Taskleiste immer noch da. – giodamelio

+0

Die Taskleiste wird manchmal für ein oder zwei Sekunden angezeigt, aber verschwindet. (Ich bin nicht sicher, was bewirkt, dass es für einen Moment bleibt.) – JYelton

+0

In WinXP verschwand die Taskleiste nicht nach 5 Minuten. – giodamelio