zoukankan      html  css  js  c++  java
  • winform中设置FormBorderStyle为None后点击任务栏自动最小化实现

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

    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中定义   
                    CreateParams cp = base.CreateParams;
                    cp.Style = cp.Style | WS_MINIMIZEBOX;   // 允许最小化操作   
                    return cp;
                }
            }

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

  • 相关阅读:
    (22)C#windows打包部署
    (2)OLEDB数据库操作
    (5)C#工具箱-数据
    (21)C#VS快捷键
    (1)OracleClient数据库操作(淘汰)
    (4)C#工具箱-菜单和工具栏
    (3)C#工具箱-容器
    (2)C#工具箱-公共控件2
    (9)oracle 表的基本查询
    企鹅
  • 原文地址:https://www.cnblogs.com/ITCommunication/p/4106352.html
Copyright © 2011-2022 走看看