如何删除关闭按钮,但不是它的图标

本文关键字:图标 关闭按钮 何删除 删除 | 更新日期: 2023-09-27 18:15:33

我有一个使用c# .net 4.0版本开发的windows应用程序。

我需要从我的一个弹出窗口中删除关闭按钮。我可以通过将Control Box属性设置为false来实现。但在这种情况下,它也会删除我的图标。否则我可以禁用关闭按钮。但是,是否有任何方法可以删除关闭按钮(留下图标的地方)?

如何删除关闭按钮,但不是它的图标

这是一个更简洁的解决方案:-)

原创文章

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中的常量,没有标志可以完全摆脱关闭按钮。(除非你想找到一种方法,通过在按钮的左侧复制一个部分来绘制按钮的顶部-呸)

此代码将禁用关闭按钮,但将显示图标。

在你的表单类中:

进口:

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