自带的关闭按钮,可以用API函数来控制禁用和恢复
[DllImport("user32.dll")]
static extern IntPtr GetSystemMenu(IntPtr hWnd,bool bRevert);
[DllImport("user32.dll")]
static extern bool EnableMenuItem(IntPtr hMenu,uint uIDEnableItem,uint uEnable);
const uint MF_BYCOMMAND = 0x00000000;
const uint MF_GRAYED = 0x00000001;
const uint MF_ENABLED = 0x00000000;
const uint SC_CLOSE = 0xF060;
const int WM_SHOWWINDOW = 0x00000018;
const int WM_CLOSE = 0x0000F060;
禁用:
var hwnd = new WindowInteropHelper(this).Handle; //获取window的句柄
IntPtr hMenu = GetSystemMenu(hwnd, 0);
EnableMenuItem(hMenu, SC_CLOSE, MF_GRAYED );
恢复
EnableMenuItem(hMenu, SC_CLOSE, MF_ENABLED );
其中
MF_BYCOMMAND 0x00000000 | 表明参数uIDEnableltem给出了菜单项的标识符。如果MF_BYCOMMAND和 MF_POSITION都没被指定,则MF_BYCOMMAND为缺省标志。 |
MF_BYPOSITION 0x00000400 | 表明参数uIDEnableltem给出了菜单项的以零为基准的相对位置 |
MF_DISABLED 0x00000002 | 表明菜单项无效,但没变灰,因此不能被选择。 |
MF_ENABLED 0x00000000 | 表明菜单项有效,并从变灰的状态恢复,因此可被选择 |
MF_GRAYED 0x00000001 | 表明菜单项无效并且变灰,因此不能被选择 |