C#下使程序进入全屏的方法

在C#下可以使用两种方法使程序进入全屏状态,一是使用内置的方法,另一种是利用WinAPI
1. 使用WinAPI
这种方法的原理是利用WinAPI获取屏幕的显示范围,并隐藏任务栏,再在窗体中使Form Maxmize以及borderless实现的,其中隐藏任务栏的操作比较复杂,需要使用WinAPI才可以实现(如果其他的方法也可以实现,欢迎评论)
source code:

using System.Runtime.InteropService; //此using的用途在于加载user32.dll
//其他的using略去
#region user32.dll
[DllImport("user32.dll", EntryPoint = "ShowWindow")]
public static extern Int32 ShowWindow(Int32, hwnd, Int32, nCmdShow);
public const Int32 SW_SHOW = 5;
public const Int32 SW_HIDE = 0;

[DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]
private static extern Int32 SystemParametersInfo(Int32 uAction, Int32 uParm, ref Rectangle lpvParam, Int32 fuWinIni);
public const Int32 SPIF_UPDATEINIFILE = 0x1;
public const Int32 SPI_SETWORKAREA = 47;
public const Int32 SPI_GETWORKAREA = 48;

[DllImport("user32.dll", EntryPoint = "FindWindow")]
private static extern Int32 FindWindow(string lpClassName, string lpWindowName);

public Boolean SetFullScreen(Boolean isFullScreen)
{
    Rectangle rectLast = Rectangle.Empty;
    Int32 hwnd = 0;
    hwnd = FindWindow("Shell_TrayWnd", null); //此处是获得任务栏的句柄

    if( 0 == hwnd) return false;
    if( isFullScreen )
    {
        ShowWindow(hwnd, SW_HIDE); //隐藏任务栏
        SystemParametersInfo(SPI_GETWORKAREA, 0, ref rectLast, SPIF_UPDATEINIFILE);//获得屏幕范围
        Rectangle rectFull = Screen.PrimaryScreen.Bounds; // 获取第一屏幕的显式范围
        SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectFull, SPI_UPDATEINIFILE);
    }
    else //还原窗口
    {
        ShowWindow(hwnd, SW_SHOW);
        SystemParametersInfo(SPI_SETWORKAREA, 0, ref rectLast, SPIF_UPDATEINIFILE);//还原窗口
    }
    return true;

  1. 使用内置的方法 强烈推荐
    从上面的代码我们可以看出,利用WinAPI虽然比较自由,比较强大,但是也过于繁琐,对于一个简单的引用来说也没有必要。所以在此pret强烈推荐使用内置的方法来实现

source code(partial)

public void GoFullScreen()
{
    this.FormBorderStyle = FormBorderStyle.None; // 设置无边框
    this.WindowState = FormWindowState.Maximized;//进入全屏
    this.TopMost = true; // 在最上面显示
}

以上是必要的代码,如果需要,还可以设置
– ResizeMode为WindowStyle.NoResize
同时如果需要把窗体恢复,那么在设置全屏之前应该把窗体的一些信息例如:
– WindowState
– WindowStyle
– ResizeMode
– TopMost
– Left
– Top
– Width
– Height
等等保存起来,再执行全屏,等到需要恢复的时候再从刚刚保存的恢复即可。

分享到: