[WPF疑难]如何禁用窗口上的关闭按钮
2008-06-12 19:03
435 查看
[WPF疑难]如何禁用窗口上的关闭按钮
周银辉
哈哈,主要是调用RemoveMenu这个API,所以没什么好说的,直接“干货”吧:
namespace VersatileMessageBoxLib
{
using System;
using System.Windows.Interop;
using System.Runtime.InteropServices;
public class CloseButton
{
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int GetSystemMenu(int hwnd, int revert);
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int EnableMenuItem(int menu, int ideEnableItem, int enable);
private const int SC_CLOSE = 0xF060;
private const int MF_BYCOMMAND = 0x00000000;
private const int MF_GRAYED = 0x00000001;
private const int MF_ENABLED = 0x00000002;
private CloseButton()
{
}
public static void Disable(int handle)
{
// The return value specifies the previous state of the menu item
// (it is either MF_ENABLED or MF_GRAYED). 0xFFFFFFFF indicates that
// the menu item does not exist.
switch (EnableMenuItem(GetSystemMenu(handle, 0), SC_CLOSE, MF_BYCOMMAND | MF_GRAYED))
{
case MF_ENABLED:
break;
case MF_GRAYED:
break;
case -1:
throw new Exception("The Close menu item does not exist.");
default:
break;
}
}
}
在使用时:调用CloseButton.Disable(int handle)方法将窗口句柄传进去就可以了,如果是WPF窗口的化,可以使用 int handle = new WindowInteropHelper(window).Handle.ToInt32(); 来取得句柄,WindowForms窗口的句柄是可以直接取得的。
另外,如果你想Cancel窗口的关闭而不是禁用该按钮,那么可以参考我的这篇文章:[WPF疑难]Hide me! not close
周银辉
哈哈,主要是调用RemoveMenu这个API,所以没什么好说的,直接“干货”吧:
namespace VersatileMessageBoxLib
{
using System;
using System.Windows.Interop;
using System.Runtime.InteropServices;
public class CloseButton
{
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int GetSystemMenu(int hwnd, int revert);
[DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int EnableMenuItem(int menu, int ideEnableItem, int enable);
private const int SC_CLOSE = 0xF060;
private const int MF_BYCOMMAND = 0x00000000;
private const int MF_GRAYED = 0x00000001;
private const int MF_ENABLED = 0x00000002;
private CloseButton()
{
}
public static void Disable(int handle)
{
// The return value specifies the previous state of the menu item
// (it is either MF_ENABLED or MF_GRAYED). 0xFFFFFFFF indicates that
// the menu item does not exist.
switch (EnableMenuItem(GetSystemMenu(handle, 0), SC_CLOSE, MF_BYCOMMAND | MF_GRAYED))
{
case MF_ENABLED:
break;
case MF_GRAYED:
break;
case -1:
throw new Exception("The Close menu item does not exist.");
default:
break;
}
}
}
在使用时:调用CloseButton.Disable(int handle)方法将窗口句柄传进去就可以了,如果是WPF窗口的化,可以使用 int handle = new WindowInteropHelper(window).Handle.ToInt32(); 来取得句柄,WindowForms窗口的句柄是可以直接取得的。
另外,如果你想Cancel窗口的关闭而不是禁用该按钮,那么可以参考我的这篇文章:[WPF疑难]Hide me! not close
相关文章推荐
- [WPF疑难]如何禁用窗口上的关闭按钮
- [WPF疑难]如何禁用窗口上的关闭按钮
- WPF中如何禁用/去除窗口右上角的关闭按钮
- WPF中如何禁用/去除窗口右上角的关闭按钮
- [WPF疑难]如何禁用WPF窗口的系统菜单(SystemMenu)
- 如何禁用窗口关闭按钮在一个 MFC 多文档界面 (MDI) 应用程序
- 如何禁用窗口关闭按钮在一个 MFC 多文档界面 (MDI) 应用程序
- [WPF疑难]如何禁用WPF窗口的系统菜单(SystemMenu)
- [WPF疑难]如何禁用WPF窗口的系统菜单(SystemMenu)
- VB 编程中如何使窗口右上角的关闭按钮(X)失效
- C# 禁用 关闭窗口 按钮的方法
- C# 禁用 关闭窗口 按钮的方法
- 如何在网页中加入关闭窗口的按钮?
- [总结] 如何判断IE窗口关闭和让IE6.0右上角的“闭关”按钮失效
- 如何实现“WinForm窗体禁用关闭按钮”方法功能及源代码
- C#如何禁用Form窗口的最大化按钮
- 禁用form/窗口的关闭按钮(来自网上的vb代码)
- 如何让在iframe框架内的按钮模拟HTA窗口的关闭功能? [复制链接]
- C#.NET常见问题(FAQ)-如何不显示窗口的关闭按钮
- [转]如何禁用WPF窗口的系统菜单(SystemMenu)