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

  • 相关阅读:
    java网络编程(UDP详解)
    java网络编程(TCP详解)
    java-单例详解
    java-接口和抽象类的联系和区别。
    java-集合小结
    Java异常(一)Java异常简介及其框架
    JAVA的接口
    深入理解Java的接口和抽象类
    linux动态库编译和使用详细剖析
    C基础 time.h 简单思路扩展
  • 原文地址:https://www.cnblogs.com/zhouyinhui/p/1218582.html
Copyright © 2011-2022 走看看