Public Class FMain
'定义窗体变量
Private fullnow As Boolean = False'标记当前窗体是否为全屏状态
Private rect As New Rectangle'保存的全屏前的装提,退出全屏时恢复到此状况
'全屏切换
Private Sub ChangeFullScreen()
fullnow = Not fullnow
Me.WindowState = FormWindowState.Normal'这一句是我自己加的,全屏最大化前恢复到默认状态(可能与我用的用户界面有关,不写也可以)
SetFullScreen(fullnow, rect)
If fullnow Then
Me.FormBorderStyle = FormBorderStyle.None
'Me.ControlBox = False'还是与我用的界面控件有关
Me.WindowState = FormWindowState.Maximized
'notify.ShowBalloonTip(2000, "注意", "应用正在以全屏模式运行。", ToolTipIcon.Info)
Else
Me.FormBorderStyle = FormBorderStyle.Sizable
'Me.ControlBox = True
Me.WindowState = FormWindowState.Normal
End If
End Sub
'调用全屏切换
'.......代码略去
'当窗体退出时检查全屏状态,如果是全屏则恢复(主要是任务栏)
Private Sub FMain_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
If fullnow Then
SetFullScreen(False, rect)
End If
End Sub
End Class
首先引用API,最好写到一个模块里,这样可以全局调用
Module FullScreen
Public Declare Auto Function FindWindow Lib "user32.dll" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Public Declare Auto Function ShowWindow Lib "user32.dll" (ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer
Public Declare Auto Function SystemParametersInfo Lib "user32.dll" (ByVal uAction As Integer, ByVal uParam As Integer, ByRef lpvParam As Rectangle, ByVal fuWinIni As Integer) As Integer
Public Const SPIF_UPDATEINIFILE As Integer = &H1
Public Const SPI_SETWORKAREA As Integer = 47
Public Const SPI_GETWORKAREA As Integer = 48
Public Const SW_SHOW As Integer = 5
Public Const SW_HIDE As Integer = 0
Public Function SetFullScreen(ByVal fullscreen As Boolean, ByRef rectOld As Rectangle) As Boolean
Dim Hwnd As Integer = FindWindow("Shell_TrayWnd", Nothing)
If Hwnd = 0 Then
Return False
End If
If fullscreen Then
ShowWindow(Hwnd, SW_HIDE)
Dim rectFull As Rectangle = Screen.PrimaryScreen.Bounds
SystemParametersInfo(SPI_GETWORKAREA, 0, rectOld, SPIF_UPDATEINIFILE) 'Get
SystemParametersInfo(SPI_SETWORKAREA, 0, rectFull, SPIF_UPDATEINIFILE) 'Set
Else
ShowWindow(Hwnd, SW_SHOW)
SystemParametersInfo(SPI_SETWORKAREA, 0, rectOld, SPIF_UPDATEINIFILE)
End If
Return True
End Function
End Module
窗口代码,相对比较简单