哈哈,主要是调用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 win32
, int
, private
, 句柄
, handle
, 窗口
, windowform
, charset
#windowform
wpf 按钮禁用样式、wpf 按钮禁用、wpf 按钮关闭当前窗口、wpf 按钮打开新窗口、wpf 窗口关闭按钮,以便于您获取更多的相关知识。