1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Windows.Forms;
9 using System.Runtime.InteropServices;
10
11 namespace WindowsFormsApplication2
12 {
13 public partial class Form1 : Form
14 {
15 public Form1()
16 {
17 InitializeComponent();
18 this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
19 }
20
21 protected override void OnMouseDown(MouseEventArgs e)
22 {
23 base.OnMouseDown(e);
24 if (e.Button == MouseButtons.Left &&
25 this.WindowState != FormWindowState.Maximized)
26 {
27 ReleaseCapture();
28 SendMessage(this.Handle, 274, 61440 + 9, 0);
29 }
30 }
31
32 [DllImport("user32.dll")]
33 public static extern int ReleaseCapture();
34
35 [DllImport("user32.dll")]
36 public static extern int SendMessage(IntPtr hwnd, int msg, int up, int lp);
37
38 protected override void WndProc(ref Message m)
39 {
40 switch (m.Msg)
41 {
42 case (int)WindowsMessage.WM_NCHITTEST:
43 this.WM_NCHITTEST(ref m);
44 break;
45 default:
46 base.WndProc(ref m);
47 break;
48 }
49 }
50
51 public static int LOWORD(int value)
52 {
53 return value & 0xFFFF;
54 }
55
56 public static int HIWORD(int value)
57 {
58 return value >> 16;
59 }
60
61 private void WM_NCHITTEST(ref Message m)
62 {
63 int wparam = m.LParam.ToInt32();
64 Point point = new Point(LOWORD(wparam), HIWORD(wparam));
65 point = this.PointToClient(point);
66
67 if (point.X <= 5)
68 {
69 if (point.Y <= 5)
70 m.Result = (IntPtr)WinAPIConst.HTTOPLEFT;
71 else if (point.Y > this.Height - 5)
72 m.Result = (IntPtr)WinAPIConst.HTBOTTOMLEFT;
73 else
74 m.Result = (IntPtr)WinAPIConst.HTLEFT;
75 }
76 else if (point.X >= this.Width - 5)
77 {
78 if (point.Y <= 5)
79 m.Result = (IntPtr)WinAPIConst.HTTOPRIGHT;
80 else if (point.Y >= this.Height - 5)
81 m.Result = (IntPtr)WinAPIConst.HTBOTTOMRIGHT;
82 else
83 m.Result = (IntPtr)WinAPIConst.HTRIGHT;
84 }
85 else if (point.Y <= 5)
86 {
87 m.Result = (IntPtr)WinAPIConst.HTTOP;
88 }
89 else if (point.Y >= this.Height - 5)
90 {
91 m.Result = (IntPtr)WinAPIConst.HTBOTTOM;
92 }
93 else
94 base.WndProc(ref m);
95 }
96 }
97
98 public enum WindowsMessage
99 {
100 /// <summary>
101 /// 移动鼠标,桉树或释放鼠标时发生
102 /// </summary>
103 WM_NCHITTEST = 0x84,
104 }
105 public class WinAPIConst
106 {
107 public const int HTLEFT = 10;
108 public const int HTRIGHT = 11;
109 public const int HTTOP = 12;
110 public const int HTTOPLEFT = 13;
111 public const int HTTOPRIGHT = 14;
112 public const int HTBOTTOM = 15;
113 public const int HTBOTTOMLEFT = 0x10;//16
114 public const int HTBOTTOMRIGHT = 17;
115 public const int HTCAPTION = 2;
116
117 }
118 }
因为相信,所以我去做了......