无边框窗体随鼠标移动

主要用到两个API函数:ReleaseCapture()和SendMessage().

ReleaseCapture用来释放被当前线程中某个窗口捕获的光标。

SendMessage是向指定的窗体发送消息。

在窗体的MouseDown事件中写即可:

Delphi:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

  ReleaseCapture;

  SendMessage(self.Handle,WM_SYSCOMMAND,SC_MOVE or HTCAPTION,0);

end;

C#:

加入程序集:using System.Runtime.InteropServices;

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Runtime.InteropServices;





namespace WindowsFormsApplication6

{

    public partial class Form2 : Form

    {

        [DllImport("user32.dll", EntryPoint = "ReleaseCapture")]

        private static extern bool ReleaseCapture();

        [DllImport("user32", EntryPoint = "SendMessage")]

        private static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);

        const int WM_SYSCOMMAND = 0x0112;

        const int SC_MOVE = 61456;

        const int HTCAPTION = 2;

        public Form2()

        {

            InitializeComponent();

        }



        private void button1_Click(object sender, EventArgs e)

        {

            this.Hide();

            this.Close();

        }



        private void Form2_Load(object sender, EventArgs e)

        {



        }



        private void Form2_MouseDown(object sender, MouseEventArgs e)

        {

            ReleaseCapture();

            SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION,0);

        }

    }

}

 

 

 

你可能感兴趣的:(移动)