您的位置:首页 > 其它

[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: