ibcadmin 发表于 2013-1-14 19:43:15

winform实现窗口大化小化关闭功能(FormBorderStyle)

为了界面好看,我们有时候会设置窗体的FormBorderStyle属性为NONE.

这时,我们的窗体就没了标题栏,我们就没办法实现窗口小化大化关闭功能。

现在我们可以自定义三个漂亮的按钮 来实现这项工作。

首先,引用命名空间

using System.Windows.Forms;
using System.Runtime.InteropServices;


二:申明win32方法,放在Form类里面

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

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


三:在Form的Load事件中添加以下代码

//无标题窗体右键菜单
            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);



第四步,把以下代码添加到Form的类中

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



还有一种方法可以实现。 下节会讲解到。

金贤重 发表于 2013-1-14 19:49:12

:D支持~~~顶!

尹兴飞 发表于 2013-1-14 22:33:19

顶起来 :lol:lol:lol:lol:lol

ibcadmin 发表于 2013-1-14 23:08:53

{:2_35:}{:2_35:}{:2_35:}{:2_35:}{:2_35:}{:2_35:}{:2_35:}{:2_35:}

尹兴飞 发表于 2013-1-16 19:31:19

发现问题,public static extern IntPtr SetWindowLong(HandleRef hWnd, int nIndex, int dwNewLong);

默认这个在form类是没有自动using System;
大家记得先添加!

IoveBC 发表于 2013-2-24 20:18:14

今天试了试,好像没有什么变化啊,大化小化关闭是不是这样:
namespace Winform大化小化关闭
{
    public partial class Form1 : Form
    {
      
         public static extern int GetWindowLong(HandleRef hWnd, int nIndex);
      
         public static extern IntPtr SetWindowLong(HandleRef hWnd, int nIndex, int dwNewLong);
      public Form1()
      {
            InitializeComponent();

      }
      protected override CreateParams CreateParams
      {
            get
            {
                const int WS_MINIMIZEBOX = 0x00020000;// Winuser.h中定义   
                CreateParams cp = base.CreateParams;
                cp.Style = cp.Style | WS_MINIMIZEBOX;   // 允许最小化操作   
                return cp;
            }
      }
      private void Form1_Load(object sender, EventArgs e)
      {
            //无标题窗体右键菜单
            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);
      }
    }
}

ibcadmin 发表于 2013-2-24 21:25:35

IoveBC 发表于 2013-2-24 20:18 static/image/common/back.gif
今天试了试,好像没有什么变化啊,大化小化关闭是不是这样:
namespace Winform大化小化关闭
{


我记得我有发过一篇简单实现这种方法的帖子这种方法我自己也没用过,

IoveBC 发表于 2013-2-25 08:38:14

不是啊,因为窗口的默认大小就是可以调节的,这个大化小化关闭的已经是默认了

ibcadmin 发表于 2013-2-25 19:12:47

IoveBC 发表于 2013-2-25 08:38 static/image/common/back.gif
不是啊,因为窗口的默认大小就是可以调节的,这个大化小化关闭的已经是默认了

你没有懂意思,当你把窗体标题去掉的时候,就是改变窗体无标题样式的时候,窗体就没有办法动了,这时候就用到了这个

IoveBC 发表于 2013-2-27 18:02:33

那个我也是试了的,的确,但是我在去除了标题样式的时候加了这段代码也是没有用的啊
页: [1] 2
查看完整版本: winform实现窗口大化小化关闭功能(FormBorderStyle)