Click here to Skip to main content
15,884,473 members
Articles / Programming Languages / C#
Article

How To Make a Windows Form App Truly Full Screen (and Hide Taskbar) in C#

Rate me:
Please Sign up or sign in to vote.
4.52/5 (37 votes)
3 Dec 2006CPOL2 min read 383K   9.7K   98   34
One of the sounds-like-simple questions is “how to make your application truly Full Screen” i.e. not showing Taskbar or anything like that on the screen estate
Sample Image - MaxWinForm.png

Introduction

One of the sounds-like-simple questions is “how to make your application truly Full Screen”, i.e. not showing Taskbar or anything like that.

The initial approach is obvious...

C#
targetForm.WindowState = FormWindowState.Maximized;
targetForm.FormBorderStyle = FormBorderStyle.None;
targetForm.TopMost = true;

... assuming that the target form is referenced with targetForm.

Does it work? Well, sort of. If your Taskbar has default setting unchecked for “Keep the taskbar on top of other Windows”, this will present your application in all its glory all over the screen estate.

However, if the Taskbar is set to appear on top of all others, this won't help - your application won't cover it.

Update For This Approach

In the discussion of the article (below) Azlan David (thanks David!) suggested to try this approach:

C#
targetForm.FormBorderStyle = FormBorderStyle.None;
targetForm.WindowState = FormWindowState.Maximized;

(Just changed the order of property assignments.) It does the work on all Win XP SP2 computers where I had the opportunity to test it; however, on one Win 2003 SP1 computer, this did not help; I'm still investigating why.

Let’s go further - the next step is to use P/Invoke and to engage the Win32 API services. There is an easy way to hide a particular window. So, find the Taskbar and hide it:

C#
private const int SW_HIDE = 0;
private const int SW_SHOW = 1;

[DllImport("user32.dll")]
private static extern int FindWindow(string className, string windowText);
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int command);

int hWnd = FindWindow("Shell_TrayWnd", "");
ShowWindow(hWnd, SW_HIDE);

targetForm.WindowState = FormWindowState.Maximized;
targetForm.FormBorderStyle = FormBorderStyle.None;
targetForm.TopMost = true;

(You need to add using System.Runtime.InteropServices;)

Is this better? In theory, yes - the Taskbar is hidden, but your application still does not occupy the whole screen - the place where the Taskbar was is not used.

The real and proven solution is to make a request to WinAPI that your form take the whole screen estate - Taskbar will hide itself in that case. Full information about that can be found in the KB article Q179363: How To Cover the Task Bar with a Window.

The steps are as follows:

  • Find out the dimension of the screen estate by calling GetSystemMetrics
  • Set the dimensions of your form to full screen

Here is the actual code:

C#
/// <summary>
/// Selected Win API Function Calls
/// </summary>

public class WinApi
{
    [DllImport("user32.dll", EntryPoint = "GetSystemMetrics")]
    public static extern int GetSystemMetrics(int which);

    [DllImport("user32.dll")]
    public static extern void
        SetWindowPos(IntPtr hwnd, IntPtr hwndInsertAfter,
                     int X, int Y, int width, int height, uint flags);        

    private const int SM_CXSCREEN = 0;
    private const int SM_CYSCREEN = 1;
    private static IntPtr HWND_TOP = IntPtr.Zero;
    private const int SWP_SHOWWINDOW = 64; // 0×0040

    public static int ScreenX
    {
        get { return GetSystemMetrics(SM_CXSCREEN);}
    }

    public static int ScreenY
    {
        get { return GetSystemMetrics(SM_CYSCREEN);}
    }

    public static void SetWinFullScreen(IntPtr hwnd)
    {
        SetWindowPos(hwnd, HWND_TOP, 0, 0, ScreenX, ScreenY, SWP_SHOWWINDOW);
    }
}

/// <summary>
/// Class used to preserve / restore / maximize state of the form
/// </summary>
public class FormState
{
    private FormWindowState winState;
    private FormBorderStyle brdStyle;
    private bool topMost;
    private Rectangle bounds;

    private bool IsMaximized = false;

    public void Maximize(Form targetForm)
    {
        if (!IsMaximized)
        {
            IsMaximized = true;
            Save(targetForm);
            targetForm.WindowState = FormWindowState.Maximized;
            targetForm.FormBorderStyle = FormBorderStyle.None;
            targetForm.TopMost = true;
            WinApi.SetWinFullScreen(targetForm.Handle);
        }
    }

    public void Save(Form targetForm)
    {
        winState = targetForm.WindowState;
        brdStyle = targetForm.FormBorderStyle;
        topMost = targetForm.TopMost;
        bounds = targetForm.Bounds;
    }

    public void Restore(Form targetForm)
    {
        targetForm.WindowState = winState;
        targetForm.FormBorderStyle = brdStyle;
        targetForm.TopMost = topMost;
        targetForm.Bounds = bounds;
        IsMaximized = false;
    }
}

Now you can use the above class in your WinForms application like this:

C#
public partial class MaxForm : Form
{
    FormState formState = new FormState();

    public MaxForm()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        formState.Maximize(this);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        formState.Restore(this);
    }
}

The full code and example application can be downloaded from the link at the top of this article.

History

  • 3rd December, 2006: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Serbia Serbia
Highly skilled, very efficient, organized and focused senior programmer and project manager.

Specialist for the E-commerce solutions based on Microsoft Web technologies on top of MS SQL or Oracle database servers.

13 years of experience. Strong in .Net (C# / ASP.NET), XML, JavaScript, DHTML, Database design, PL/SQL, T-SQL, ADO / ADO.NET, scripting and shell languages (Awk, CMD, 4Dos / 4NT).

Comments and Discussions

 
QuestionThis is simple and it works Pin
trantrum28-Dec-15 8:36
professionaltrantrum28-Dec-15 8:36 
QuestionDoesn't work on Windows 8. Pin
Xiaoming Tu19-Sep-14 2:22
Xiaoming Tu19-Sep-14 2:22 
AnswerRe: Doesn't work on Windows 8. Pin
serge074-Dec-14 5:28
serge074-Dec-14 5:28 
AnswerConfirmation Pin
Cengiz Araz17-Jul-14 22:55
Cengiz Araz17-Jul-14 22:55 
GeneralMy vote of 5 Pin
Manoj Kumar Choubey23-Feb-12 21:40
professionalManoj Kumar Choubey23-Feb-12 21:40 
GeneralEasier Still Pin
gutharius12-Jan-11 6:05
gutharius12-Jan-11 6:05 
GeneralRe: Easier Still Pin
johannesnestler23-Feb-12 22:32
johannesnestler23-Feb-12 22:32 
Generalhiding the mouse cursor on fullscreen.. Pin
asgz25-Jul-10 23:28
asgz25-Jul-10 23:28 
QuestionDoes this work on Multi-Monitor systems? Pin
quintic20-May-10 12:04
quintic20-May-10 12:04 
QuestionHow to make a windows application in .net such that it goes full screen and disable the keyboard at the same time Pin
keeks12311-Feb-09 21:20
keeks12311-Feb-09 21:20 
AnswerRe: How to make a windows application in .net such that it goes full screen and disable the keyboard at the same time Pin
Dejan.Vesic11-Feb-09 21:31
Dejan.Vesic11-Feb-09 21:31 
QuestionHi, Does anyone know how to do this in C++/CLI ? Pin
shadowfaxe2-Sep-08 3:39
shadowfaxe2-Sep-08 3:39 
GeneralSimpler way to get screen bounds PinPopular
maciej_jl19-Dec-07 7:16
maciej_jl19-Dec-07 7:16 
GeneralTaskbar not hiding Pin
CodeHook25-Sep-07 0:36
CodeHook25-Sep-07 0:36 
GeneralControlbox Pin
jamesrgoodwin21-Aug-07 6:26
jamesrgoodwin21-Aug-07 6:26 
GeneralThank you Pin
B.V.Papadopoulos26-Mar-07 5:56
professionalB.V.Papadopoulos26-Mar-07 5:56 
Generalconvert to vb.net, please HELP Pin
tlin504317-Dec-06 22:13
tlin504317-Dec-06 22:13 
GeneralRe: convert to vb.net, please HELP Pin
Dejan.Vesic17-Dec-06 22:19
Dejan.Vesic17-Dec-06 22:19 
GeneralRe: convert to vb.net, please HELP Pin
ixup26-Aug-08 3:47
ixup26-Aug-08 3:47 
QuestionHow to use on Pocket PC? Pin
Kitro15-Dec-06 5:57
Kitro15-Dec-06 5:57 
AnswerRe: How to use on Pocket PC? Pin
Dejan.Vesic15-Dec-06 10:37
Dejan.Vesic15-Dec-06 10:37 
AnswerRe: How to use on Pocket PC? Pin
Ashvin Gunga20-Feb-07 18:56
Ashvin Gunga20-Feb-07 18:56 
GeneralAdditional details.. Pin
Skylan Hill7-Dec-06 18:24
Skylan Hill7-Dec-06 18:24 
GeneralSimpler Way Pin
Azlan David5-Dec-06 6:15
Azlan David5-Dec-06 6:15 
GeneralRe: Simpler Way Pin
Dejan.Vesic5-Dec-06 6:36
Dejan.Vesic5-Dec-06 6:36 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.