天天看點

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

        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:

                case -1:

                    throw new Exception("The Close menu item does not exist.");

                default:

            }

    }

    在使用時:調用CloseButton.Disable(int

handle)方法将視窗句柄傳進去就可以了,如果是WPF視窗的化,可以使用           int handle = new

WindowInteropHelper(window).Handle.ToInt32();

來取得句柄,WindowForms視窗的句柄是可以直接取得的。