hecate
hecate

Reputation: 632

Not allowing users to resize a maximized form

I am developing a Windows Forms application in C# in which I have a form which must start in a maximized state and not allow users to restore or resize it. I have already configured the form to start in maximized mode, disable the restore and maximize button and locked the borders of the form but when the title bar is double clicked, the form restores to a smaller size which is unexpected. The following are the properties I set to achieve the required behaviour:

FormBorderStyle = FixedSingle
MaximizeBox = False
WindowState = Maximized

Can someone please help me solve this problem and explain me the solution?

Thanks in advance.

Upvotes: 1

Views: 219

Answers (2)

mrogal.ski
mrogal.ski

Reputation: 5940

You have to remember that your form starts with some default size values and double click is just toggling between 2 states.
Within your normal state the form will retrieve it's last ( in your case default ) size which you can override :

Width = Screen.PrimaryScreen.Bounds.Width;
Height = Screen.PrimaryScreen.Bounds.Height;

Another thing is that your application has something called start position which ( from what I remember ) defaults to the center of the screen and you can change it using :

Form.StartPosition = new Point(0, 0); // top-left corner

Now all you have to do in your applicaiton is to check for the toggle between window states. Easiest way would be to use WndProc and wait for messages listed in this msdn page :

protected override void WndProc(ref Message m)
{
    const int WM_SYSCOMMAND = 0x0112;
    const int SC_MAXIMIZE   = 0xF030;
    const int SC_RESTORE    = 0xF120;

    if (m.Msg == WM_SYSCOMMAND)
    {
        switch((int)m.WParam)
        {
            case SC_RESTORE:
                // your window was restored ( double clicked on the command bar )
                // set it's window state back to maximize or do whatever
                break;

             case SC_MAXIMIZE:
                 // your window was maximized .. no actions needed, just for debugging purpose
                  break;
        }
    }
    base.WndProc(ref m);
}

Upvotes: 7

EpicKip
EpicKip

Reputation: 4043

This can be accomplished by catching the event and overriding it:

private void Form_Load(object sender, EventArgs e)
{
    this.FormBorderStyle = FormBorderStyle.FixedSingle;
    this.WindowState = FormWindowState.Maximized;
    this.MaximizeBox = false;
    this.MinimumSize = Screen.GetWorkingArea(this.Location).Size;
}

private const int WM_NCLBUTTONDBLCLK = 0x00A3; 
//double click on a title bar

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_NCLBUTTONDBLCLK)
    {
        m.Result = IntPtr.Zero;
        return;
    }
    base.WndProc(ref m);
}

Upvotes: 3

Related Questions