我需要全屏制作winform.这是我在网上找到的.
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
我是vb.net的新手,不知道如何做第1步或第2步.有人可以给我一个片段或指向正确的方向吗?
谢谢giodamelio
诀窍是获取HwndSource并调用其AddHook()方法.这有效:
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
Winforms表单的相同代码:
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