Click here to Skip to main content
Click here to Skip to main content

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

, 3 Dec 2006
Rate this:
Please Sign up or sign in to vote.
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...

    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:

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:

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:

/// <span class="code-SummaryComment"><summary></span>
/// Selected Win API Function Calls
/// <span class="code-SummaryComment"></summary></span>

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);
    }
}

/// <span class="code-SummaryComment"><summary></span>
/// Class used to preserve / restore / maximize state of the form
/// <span class="code-SummaryComment"></summary></span>
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:

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)

About the Author

Dejan.Vesic
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

 
AnswerConfirmation PinmemberCengiz Araz17-Jul-14 22:55 
GeneralMy vote of 5 Pinmembermanoj kumar choubey23-Feb-12 21:40 
GeneralEasier Still Pinmembergutharius12-Jan-11 6:05 
GeneralRe: Easier Still Pinmemberjohannesnestler23-Feb-12 22:32 
Generalhiding the mouse cursor on fullscreen.. Pinmemberasgz25-Jul-10 23:28 
QuestionDoes this work on Multi-Monitor systems? Pinmemberquintic20-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 Pinmemberkeeks12311-Feb-09 21:20 
I would like to make an application for online exam such that when the exam starts, the window has to go full screen (even the taskbar should be hidden) and only exit it after the exam is over, so that no one can go onto windows and cheat during the exam. Kindly Help someone Frown | :(
 
Thanks in advance! Smile | :)
AnswerRe: How to make a windows application in .net such that it goes full screen and disable the keyboard at the same time PinmemberDejan.Vesic11-Feb-09 21:31 
QuestionHi, Does anyone know how to do this in C++/CLI ? Pinmembershadowfaxe2-Sep-08 3:39 
GeneralSimpler way to get screen bounds Pinmembermaciej_jl19-Dec-07 7:16 
GeneralTaskbar not hiding PinmemberCodeHook25-Sep-07 0:36 
GeneralControlbox Pinmemberjamesrgoodwin21-Aug-07 6:26 
GeneralThank you Pinmembervaximillian26-Mar-07 5:56 
Generalconvert to vb.net, please HELP Pinmembertlin504317-Dec-06 22:13 
GeneralRe: convert to vb.net, please HELP PinmemberDejan.Vesic17-Dec-06 22:19 
GeneralRe: convert to vb.net, please HELP Pinmemberixup26-Aug-08 3:47 
QuestionHow to use on Pocket PC? PinmemberKitro15-Dec-06 5:57 
AnswerRe: How to use on Pocket PC? PinmemberDejan.Vesic15-Dec-06 10:37 
AnswerRe: How to use on Pocket PC? PinmemberAshvin Gunga20-Feb-07 18:56 
GeneralAdditional details.. PinmemberSkylan Hill7-Dec-06 18:24 
GeneralSimpler Way PinmemberAzlan David5-Dec-06 6:15 
GeneralRe: Simpler Way PinmemberDejan.Vesic5-Dec-06 6:36 
GeneralRe: Simpler Way PinmemberAzlan David5-Dec-06 20:49 
GeneralRe: Simpler Way PinmemberDejan.Vesic5-Dec-06 22:19 
GeneralRe: Simpler Way PinmemberAzlan David5-Dec-06 23:36 
GeneralRe: Simpler Way PinmemberDejan.Vesic5-Dec-06 23:55 
QuestionVery nice, but can you... PinmemberKGilbert4-Dec-06 7:41 
AnswerRe: Very nice, but can you... PinmemberDejan.Vesic4-Dec-06 8:03 
AnswerRe: Very nice, but can you... PinmemberAzlan David5-Dec-06 21:22 
GeneralWell Done Pinmemberaprenot4-Dec-06 6:29 
GeneralRe: Well Done PinmemberDejan.Vesic4-Dec-06 7:23 

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

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

| Advertise | Privacy | Mobile
Web02 | 2.8.140721.1 | Last Updated 3 Dec 2006
Article Copyright 2006 by Dejan.Vesic
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid