vb.net – 使Winforms全屏

我需要全屏制作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

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...