[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);
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:
case -1:
throw new Exception("The Close menu item does not exist.");
default:
}
}
在使用時:調用CloseButton.Disable(int
handle)方法将視窗句柄傳進去就可以了,如果是WPF視窗的化,可以使用 int handle = new
WindowInteropHelper(window).Handle.ToInt32();
來取得句柄,WindowForms視窗的句柄是可以直接取得的。