1.重写wndProc代码:
- protected override void WndProc(ref Message m)
- {
- const int WM_NCHITTEST = 0x84;
- const int HTCLIENT = 0x01;
- const int HTCAPTION = 0x02;
- if (m.Msg == WM_NCHITTEST)
- {
- this.DefWndProc(ref m);
- if (m.Result.ToInt32() == HTCLIENT)
- m.Result = new IntPtr(HTCAPTION);
- else
- base.WndProc(ref m);
- }
- else
- {
- base.WndProc(ref m);
- }
- }
- 2.创建消息
- 代码:
- private const int WM_NCLBUTTONDOWN = 0x00A1;
- private const int WM_NCHITTEST = 0x84;
- private const int HT_CAPTION = 0x2;
- private const int HT_CLIENT = 0x1;
- private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
- {
- //this.Capture = false;
- pictureBox1.Capture = false;
- Message msg = Message.Create(Handle, WM_NCLBUTTONDOWN, (IntPtr)HT_CAPTION, IntPtr.Zero);
- WndProc(ref msg);
- }
- 3.调用API代码:
- using System.Runtime.InteropServices;
- [DllImport("user32.dll")]
- public static extern bool ReleaseCapture();
- [DllImport("user32.dll")]
- public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
- public const int WM_SYSCOMMAND = 0x0112;
- public const int SC_MOVE = 0xF010;
- public const int HTCAPTION = 0x0002;
- //在窗体的_MouseDown中加入如下代码:
- 如:
- private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
- {
- ReleaseCapture();
- SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
- }
複製代碼 |