Re: Hide the "X" on a Windows Form

Mike Andrews <[email protected]> Wed, 5 Sep 2007 09:44:15 -0500
Newsgroups gmane.comp.windows.devel.dotnet.winforms
Message-ID <[email protected]>
It's good for C# people too.

On 9/4/07, Booth, Bill <[email protected]> wrote:
>
> Here is a good site for that sort of stuff for VB .NET people anyway.
> http://allapi.mentalis.org/apilist/apilist.php
>
> http://allapi.mentalis.org/apilist/GetSystemMenu.shtml
>
> I think the new site has some good stuff as well.
> http://mentalis.org/
>
>
> -----Original Message-----
> From: Discussion forum for developers using Windows Forms to build apps
> and controls [mailto:[email protected]] On Behalf Of
> Phil Sayers
> Sent: Tuesday, September 04, 2007 13:03
> To: [email protected]
> Subject: Re: [DOTNET-WINFORMS] Hide the "X" on a Windows Form
>
> I get the feeling that plenty of the windows API calls that were used to
> get
> additional functionality in the vb6 days have been lost/forgotten with
> the
> advent of .Net, but there still seems to be a need for some of the
> techniques and API calls.
>
>
> -----Original Message-----
> From: Discussion forum for developers using Windows Forms to build apps
> and controls [mailto:[email protected]]On Behalf Of
> Mike Andrews
> Sent: Tuesday, September 04, 2007 1:40 PM
> To: [email protected]
> Subject: Re: [DOTNET-WINFORMS] Hide the "X" on a Windows Form
>
>
> I'd forgotten all about that from my vb6 days.
> Yes, you can disable the form's close system menu which will in turn
> disable
> the close button.
>
> I've got a class below that implements the given solution.  However, ALT
> +
> F4 will still cause the form to close so you will have to add keyboard
> checks to disable that as well.
>
>
>    public class FormDisableClose: Form {
>
>        #region PInvoke
>
>        [DllImport("user32.dll")]
>        private static extern IntPtr GetSystemMenu(IntPtr hWnd, Int32
> bRevert);
>
>        [DllImport("user32.dll")]
>        private static extern Int32 GetMenuItemCount(IntPtr hMenu);
>
>        [DllImport("user32.dll")]
>        private static extern Int32 DrawMenuBar(IntPtr hWnd);
>
>        [DllImport("user32.dll")]
>        private static extern Int32 RemoveMenu(IntPtr hMenu, Int32
> nPosition, Int32 wFlags);
>
>        private const int MF_BYPOSITION = 0x400;
>        private const int MF_REMOVE = 0x1000;
>
>        #endregion
>
>        protected override void OnHandleCreated(EventArgs e) {
>            base.OnHandleCreated(e);
>            IntPtr hMenu = GetSystemMenu(this.Handle, 0);
>            if (!hMenu.Equals(IntPtr.Zero)) {
>                int n = GetMenuItemCount(hMenu);
>                if (n > 0) {
>                    RemoveMenu(hMenu, n - 1, MF_BYPOSITION | MF_REMOVE);
>                    RemoveMenu(hMenu, n - 2, MF_BYPOSITION | MF_REMOVE);
>                    DrawMenuBar(this.Handle);
>                }
>            }
>        }
>
>    }
>
> On 9/4/07, Phil Sayers <[email protected]> wrote:
> >
> > this might get you close
> >
> > http://www.thescripts.com/forum/thread362575.html
> >
> >
> >
> > -----Original Message-----
> > From: Discussion forum for developers using Windows Forms to build
> apps
> > and controls [mailto:[email protected] ]On Behalf Of
> > Mike Andrews
> > Sent: Tuesday, September 04, 2007 12:55 PM
> > To: [email protected]
> > Subject: Re: [DOTNET-WINFORMS] Hide the "X" on a Windows Form
> >
> >
> > I don't believe there is a way to do that unless you want to create
> your
> > own
> > owner-drawn form.
> > You can prevent the form from closing when the x is clicked by using
> the
> > Form_Closing event and setting the Cancel property of the
> CancelEventArgs
> > argument to true.
> >
> >
> > On 9/4/07, Greg Robinson <[email protected]> wrote:
> > >
> > > How does one hide the "X" (Close) on a Windows From?  I need to hide
> the
> > X
> > > but leave the Maximize and Minimize.
> > >
> > > Thanks,
> > >
> > >
> > >
> > > Greg Robinson
> > > Custom Data Systems, Inc.
> > > www.cds-am.net
> > >
> >
>
> The information in this e-mail is confidential, may be legally privileged
> and is intended solely for the addressee. If you have received this e-mail
> in error, you are hereby notified that any use, distribution, or copying of
> this communication is strictly prohibited.
>