wpf中,隐藏或去除window右上角的关闭按钮

来源:互联网 发布:top域名续费多少钱 编辑:程序博客网 时间:2024/06/04 18:16
window右上角的关闭按钮,wpf没有提供可操作的方法,所以借助user32.dll的api。

第一种方法:
只能disable 关闭按钮。

[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
        private static extern IntPtr GetSystemMenu(IntPtr hWnd, UInt32 bRevert);
        [DllImport("USER32.DLL ", CharSet = CharSet.Unicode)]
        private static extern UInt32 RemoveMenu(IntPtr hMenu, UInt32 nPosition, UInt32 wFlags);
        private const UInt32 SC_CLOSE = 0x0000F060;
        private const UInt32 MF_BYCOMMAND = 0x00000000;

在window的loaded事件中添加:
var hwnd = new WindowInteropHelper(this).Handle;  //获取window的句柄
IntPtr hMenu = GetSystemMenu(hwnd, 0);
RemoveMenu(hMenu, SC_CLOSE, MF_BYCOMMAND);


第二种方法:
彻底去除关闭按钮。
  http://www.cnblogs.com/khler/archive/2009/11/26/1611446.html

private const int GWL_STYLE = -16;
        private const int WS_SYSMENU = 0x80000;
        [DllImport("user32.dll", SetLastError = true)]
        private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
        [DllImport("user32.dll")]
        private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
在window的loaded事件中添加:
var hwnd = new WindowInteropHelper(this).Handle;
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU);


0 0