Windows Forms中禁用窗体的关闭按钮
2007-01-10 21:26 Anders Cui 阅读(4224) 评论(3) 编辑 收藏 举报
有时候你会看到一些窗体,它们的标题栏上的关闭按钮被禁用了。如果程序处于某种关键进程中,你可不希望用户随意中断它,这时就可以考虑将关闭按钮禁用。.NET Framework对此没有内置的支持,不过借助于Win32 API, 可以轻松搞定。
1、新建一个Windows应用程序,新建一个窗体,进入代码视图。
2、添加必要的命名空间:
using System.Runtime.InteropServices;
3、添加必要的常数和API函数的引用:
private const int SC_CLOSE = 0xF060;
private const int MF_ENABLED = 0x00000000;
private const int MF_GRAYED = 0x00000001;
private const int MF_DISABLED = 0x00000002;
[DllImport("user32.dll", EntryPoint = "GetSystemMenu")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, int bRevert);
[DllImport("User32.dll")]
public static extern bool EnableMenuItem(IntPtr hMenu, int uIDEnableItem, int uEnable);
private const int MF_ENABLED = 0x00000000;
private const int MF_GRAYED = 0x00000001;
private const int MF_DISABLED = 0x00000002;
[DllImport("user32.dll", EntryPoint = "GetSystemMenu")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, int bRevert);
[DllImport("User32.dll")]
public static extern bool EnableMenuItem(IntPtr hMenu, int uIDEnableItem, int uEnable);
4、在窗体的Load事件处理函数内添加代码:
IntPtr hMenu = GetSystemMenu(this.Handle, 0);
EnableMenuItem(hMenu, SC_CLOSE, MF_DISABLED | MF_GRAYED);
EnableMenuItem(hMenu, SC_CLOSE, MF_DISABLED | MF_GRAYED);
下面是效果图:
那么如果该关键进程结束,需要使该按钮可用怎么办?
使用下面的代码就可以了:
IntPtr hMenu = GetSystemMenu(this.Handle, 0);
EnableMenuItem(hMenu, SC_CLOSE, MF_ENABLED);
EnableMenuItem(hMenu, SC_CLOSE, MF_ENABLED);
在http://ryanfarley.com/blog/archive/2004/04/12/526.aspx中介绍了另一种做法,也可以参考一下。
作者:Anders Cui
出处:http://anderslly.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://anderslly.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。