winform中设置无边框模式(FormBorderStyle为None)后点击任务栏图标,实现隐藏恢复窗口功能

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014385680/article/details/84103850

     在winform编程中,有时候我们可能对窗体样式需要定义,不适用系统自带的样式,这样我们可以设置FormBorderStyle属性为None。但是设置了FormBorderStyle为None后,我们点击任务栏应用程序图标并不能实现程序的最小化(或还原窗口)的操作(使用系统自带样式是可以实现的)。下面我将展示如何在FormBorderStyle为None的情况下,实现应用程序任务栏图标点击可实现最小化。

           在网上查找了很多相关文章,多数只是提供了第3条的代码,结果无法点击任务栏图标恢复窗口的现象好转,但依然存在,所以整理了我自己的完整代码如下:

1.添加如下代码

[DllImport("user32.dll", EntryPoint = "GetWindowLong", CharSet = CharSet.Auto)]
public static extern int GetWindowLong(HandleRef hWnd, int nIndex);

[DllImport("user32.dll", EntryPoint = "SetWindowLong", CharSet = CharSet.Auto)]
public static extern IntPtr SetWindowLong(HandleRef hWnd, int nIndex, int dwNewLong);

2.添加如下SetForm()方法,并在Form_Load事件中加载

 

public void SetForm()
{
    int WS_SYSMENU = 0x00080000; // 系统菜单
    int WS_MINIMIZEBOX = 0x20000; // 最大最小化按钮
    int windowLong = (GetWindowLong(new HandleRef(this, this.Handle), -16));
    SetWindowLong(new HandleRef(this, this.Handle), -16, windowLong | WS_SYSMENU | WS_MINIMIZEBOX);
}

 

3.重载Form的CreateParams属性

protected override CreateParams CreateParams
{
    get
    {
        const int WS_MINIMIZEBOX = 0x00020000;  // Winuser.h中定义,可以从MFC中查看 
        CreateParams cp = base.CreateParams;
        cp.Style = cp.Style | WS_MINIMIZEBOX;   // 允许最小化操作   
        return cp;
    }
}

 

  将上面代码在将要展示的Form中,可实现窗体FormBorderStyle为None的时候,点击任务栏应用程序图标时,窗口的最小化和还原功能。

展开阅读全文

没有更多推荐了,返回首页