ibcadmin 发表于 2012-12-16 14:56:30

Winform窗体拖动问题

来自其他社区的网友求助

如果现在有个from窗体,设置了最大和最小尺寸,现在运行时,是显示在中间,最大化后,跑到了左上角,我现在想拖动这个窗体,保持最大化的状态不变,怎么实现呢


ibcadmin 发表于 2012-12-16 14:57:08

#region 本程序中用到的API函数
      
      public static extern bool ReleaseCapture();//用来释放被当前线程中某个窗口捕获的光标
      
      public static extern bool SendMessage(IntPtr hwdn, int wMsg, int mParam, int lParam);//向指定的窗体发送Windows消息
      #endregion

      #region 本程序中需要声明的变量
      public const int WM_SYSCOMMAND = 0x0112;//该变量表示将向Windows发送的消息类型
      public const int SC_MOVE = 0xF010;//该变量表示发送消息的附加消息
      public const int HTCAPTION = 0x0002;//该变量表示发送消息的附加消息
      #endregion

      private void Form1_MouseDown(object sender, MouseEventArgs e)
      {
            ReleaseCapture();//用来释放被当前线程中某个窗口捕获的光标
            SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);//向Windows发送拖动窗体的消息
      }

Form1.Designer.cs

//
// Form1
//
加入:
this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown);

ibcadmin 发表于 2012-12-16 14:57:31

using System.Drawing;
using System.Windows.Forms;

namespace DragWindowWithMaxSize
{
    public sealed partial class FormMain : Form
    {
      #region 常量

      private const int WM_NCLBUTTONDBLCLK = 0x00a3;
      private const int WM_SYSCOMMAND      = 0x0112;
      private const int SC_MAXMIZE         = 0xf030;

      #endregion

      public FormMain()
      {
            InitializeComponent();
      }

      protected override void WndProc(ref Message m)
      {
            switch (m.Msg)
            {
                case WM_NCLBUTTONDBLCLK:
                  {
                        if (WindowState == FormWindowState.Normal)
                        {
                            Location = new Point(0,0);
                            Size = MaximumSize;
                        }
                  }
                  break;

                case WM_SYSCOMMAND:
                  {
                        switch((uint)m.WParam)
                        {
                            case SC_MAXMIZE:
                              Size = MaximumSize;
                              WindowState = FormWindowState.Maximized;
                              return;
                        }
                  }
                  break;
            }
            base.WndProc(ref m);
         
      }
    }
}

淳晴常璟 发表于 2012-12-19 17:04:18

迷茫 发表于 2013-5-30 11:46:23

我公司现招C#工程师两名,工作地点在北京海淀上地附近,要求有一定工作经验。
1.熟练使用VS2010开发环境及开发相关工具;
2.熟练进行Form,Web程序开发;
3.熟练Javascript,CSS等代码的编写;
4.能对Windows服务器配置及使用;
5.掌握使用一种数据库(SQL Server,Mysql,Oracle等)。
有推荐或自荐的请讲简历发送至:aiguodao@126.com (请注明IBC论坛)

chao2332601 发表于 2013-6-16 00:07:15

谢谢分享!!!

chao2332601 发表于 2013-6-16 04:48:13

谢谢分享!!!
页: [1]
查看完整版本: Winform窗体拖动问题