我需要全屏制作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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。