开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 6443|回复: 9

[教程] C# WInForm 无框窗体移动

[复制链接]

0

精华

5089

贡献

5256

赞扬

管理员

帖子
1149
软币
20927
在线时间
4312 小时
注册时间
2013-6-7

黄马甲

发表于 2013-6-10 22:51:29 | 显示全部楼层 |阅读模式
调用API
using System.Runtime.InteropServices;
  1. [DllImport("user32.dll")]
  2. public static extern bool ReleaseCapture();
  3. [DllImport("user32.dll")]
  4. public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
  5. public const int WM_SYSCOMMAND = 0x0112;
  6. public const int SC_MOVE = 0xF010;
  7. public const int HTCAPTION = 0x0002;
复制代码
在控件的_MouseDown中加入如下代码:
  1. private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
  2.    {
  3.         ReleaseCapture();
  4.         SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
  5.    }
复制代码

评分

参与人数 3赞扬 +3 收起 理由
ibm2000 + 1 Thanks
rakehell + 1 Thanks
aolongxue + 1 Thanks

查看全部评分

回复

使用道具 举报

0

精华

0

贡献

15

赞扬

帖子
15
软币
130
在线时间
4 小时
注册时间
2013-6-11
发表于 2013-6-12 06:20:21 | 显示全部楼层
Good Old Trick
回复

使用道具 举报

0

精华

0

贡献

13

赞扬

帖子
55
软币
1737
在线时间
87 小时
注册时间
2013-6-8
QQ
发表于 2013-6-13 11:57:39 | 显示全部楼层
不错,呵呵,谢谢楼主分享
回复

使用道具 举报

0

精华

121

贡献

92

赞扬

帖子
81
软币
3644
在线时间
272 小时
注册时间
2013-6-8
发表于 2013-6-18 10:01:26 | 显示全部楼层
学习了,支持楼主的奉献精神。
回复

使用道具 举报

0

精华

2

贡献

52

赞扬

帖子
57
软币
309
在线时间
27 小时
注册时间
2013-9-26
发表于 2013-10-18 00:32:18 | 显示全部楼层
很不错!!!支持一下楼主
回复

使用道具 举报

0

精华

1

贡献

0

赞扬

帖子
32
软币
198
在线时间
15 小时
注册时间
2013-10-22
发表于 2013-10-22 17:58:36 | 显示全部楼层
很好...GOOD 一个...
回复

使用道具 举报

0

精华

8

贡献

6

赞扬

帖子
73
软币
1062
在线时间
115 小时
注册时间
2013-9-8
发表于 2013-12-2 09:52:29 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

0

精华

657

贡献

4953

赞扬

帖子
213
软币
21202
在线时间
1788 小时
注册时间
2013-6-9
发表于 2013-12-2 13:31:33 | 显示全部楼层
感谢楼主分享!
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
13
软币
110
在线时间
10 小时
注册时间
2017-5-12
发表于 2017-5-15 10:52:09 | 显示全部楼层
ibm2000 发表于 2013-12-2 13:31
感谢楼主分享!


如果不想用引用的话 可以这样
private Point offset;
        private void BudgetSheetForm_MouseDown(object sender, MouseEventArgs e)
        {
            if (MouseButtons.Left != e.Button) return;
            Point cur = this.PointToScreen(e.Location);
            offset = new Point(cur.X - this.Left, cur.Y - this.Top);
        }
        private void BudgetSheetForm_MouseMove(object sender, MouseEventArgs e)
        {
            if (MouseButtons.Left != e.Button) return;
            Point cur = MousePosition;
            this.Location = new Point(cur.X - offset.X, cur.Y - offset.Y);
        }
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-4-25 18:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表