Как убрать кнопку закрытия, но не ее значок? - PullRequest
2 голосов
/ 24 ноября 2011

У меня есть приложение для Windows, разработанное с использованием версии C # .net 4.0.

Мне нужно удалить кнопку закрытия из одного из моих всплывающих окон.Я могу сделать это, установив для свойства Control Box значение false.Но в этом случае он также удалит мою иконку.Еще я могу отключить кнопку закрытия.Но есть ли способ удалить только кнопку закрытия (оставив значок на месте)?

Ответы [ 2 ]

5 голосов
/ 24 ноября 2011

Это немного более чистое решение: -)

Оригинальный пост

winuser.h

public partial class Form1 : Form
{
    private const int CS_NOCLOSE = 0x200;
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams mdiCp = base.CreateParams;
            mdiCp.ClassStyle = mdiCp.ClassStyle | CS_NOCLOSE;

            return mdiCp;
        }
    }

    public Form1()
    {
        InitializeComponent();
    }

}

В соответствии с константами в winuser.h нет флагов, чтобы полностью избавиться от закрытой кнопки.(Если вы не хотите найти способ рисовать поверх кнопки, скопировав раздел слева от нее - юк.)

4 голосов
/ 24 ноября 2011

Этот код отключит вашу кнопку закрытия, но покажет значок.

В вашем классе:

Импорт:

    using System.Runtime.InteropServices;

В основном классе:

    const int MF_BYPOSITION = 0x400;

    [DllImport("User32")]
    private static extern int RemoveMenu(IntPtr hMenu, int nPosition, int wFlags);

    [DllImport("User32")]
    private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);

    [DllImport("User32")]
    private static extern int GetMenuItemCount(IntPtr hWnd);

Событие:

    private void Form1_Load(object sender, EventArgs e)
    {
        IntPtr hMenu = GetSystemMenu(this.Handle, false);
        int menuItemCount = GetMenuItemCount(hMenu);
        RemoveMenu(hMenu, menuItemCount - 1, MF_BYPOSITION);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...