WPF 关闭按钮的禁用与恢复

这篇博客介绍了如何通过DllImport调用user32.dll中的函数,实现对Windows应用程序窗口关闭按钮的禁用和恢复。主要涉及到GetSystemMenu和EnableMenuItem两个API函数,以及MF_GRAYED和MF_ENABLED常量的使用。通过设置MF_GRAYED可以将关闭按钮禁用并变灰,而设置MF_ENABLED则可恢复其可用状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自带的关闭按钮,可以用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

表明菜单项无效并且变灰,因此不能被选择

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值