zoukankan      html  css  js  c++  java
  • [WPF疑难]如何禁用窗口上的关闭按钮

                                      [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);
            [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

  • 相关阅读:
    JVM调优--常用JVM监控工具使用
    jvm启动常用参数配置
    公钥和私钥原理
    tcp三次握手四次挥手
    内存泄漏和内存溢出
    hashmap解析
    Visual C++ 6.0 断点调试记录
    C++中输入一组不确定长度的数
    异或
    NULL与nullptr
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/1218582.html
Copyright © 2011-2022 走看看