标题:求助:Form拖动问题?
只看楼主
tianqy
Rank: 5Rank: 5
等 级:职业侠客
帖 子:260
专家分:332
注 册:2011-4-7
结帖率:91.43%
已结贴  问题点数:20 回复次数:4 
求助:Form拖动问题?
我现在有个from窗体,设置了最大和最小尺寸,现在运行时,是显示在中间,最大化后,跑到了左上角,我现在想拖动这个窗体,保持最大化的状态不变,怎么实现呢,谢谢大牛们
搜索更多相关主题的帖子: 谢谢 
2012-11-22 15:42
mmxo
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:13
帖 子:189
专家分:1090
注 册:2012-11-7
得分:14 
处理窗体消息,如下:
程序代码:
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);
           
        }
    }
}


[ 本帖最后由 mmxo 于 2012-11-22 18:52 编辑 ]

为提高中华编程水平而奋斗
2012-11-22 18:22
liulang1989
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-12-10
得分:0 

        #region 本程序中用到的API函数
        [DllImport("user32.dll")]
        public static extern bool ReleaseCapture();//用来释放被当前线程中某个窗口捕获的光标
        [DllImport("user32.dll")]
        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);
2012-12-13 22:05
tianqy
Rank: 5Rank: 5
等 级:职业侠客
帖 子:260
专家分:332
注 册:2011-4-7
得分:0 
回复 3楼 liulang1989
非常感谢

☞  软件驱动整个世界 ☜
2012-12-14 09:30
捉迷藏
Rank: 1
等 级:新手上路
帖 子:11
专家分:7
注 册:2012-3-4
得分:0 
改窗体属性页可以,免去输代码
2012-12-14 10:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-387945-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.102651 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved