#region 导入WinAPI函数,用于平滑移动窗口
[DllImport("user32.dll",EntryPoint="SendMessage")]
public static extern int SendMessage(int hWnd,int wMsg,int wParam,int lParam);
[DllImport("user32.dll",EntryPoint="ReleaseCapture")]
public static extern int ReleaseCapture();
public const int WM_SysCommand = 0x0112;
public const int SC_MOVE = 0xF012;
#endregion
然后在Form的MouseDown事件中这样调用:
//使窗口可以平滑拖动
ReleaseCapture();
SendMessage(this.Handle.ToInt32(),WM_SysCommand,SC_MOVE,0);
[DllImport("user32.dll",EntryPoint="SendMessage")]
public static extern int SendMessage(int hWnd,int wMsg,int wParam,int lParam);
[DllImport("user32.dll",EntryPoint="ReleaseCapture")]
public static extern int ReleaseCapture();
public const int WM_SysCommand = 0x0112;
public const int SC_MOVE = 0xF012;
#endregion
然后在Form的MouseDown事件中这样调用:
//使窗口可以平滑拖动
ReleaseCapture();
SendMessage(this.Handle.ToInt32(),WM_SysCommand,SC_MOVE,0);
呵呵,老兄我是想在移动的过程中有一个方框出现啊。
如果是控件那又怎么办呢?所以我还想知道其他方法。
我已经运行过,完全可以 private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
int xOffset;
int yOffset; if (e.Button == MouseButtons.Left)
{
//注意e.X,e.Y的坐标是相对于窗口左上角而言的
xOffset = -e.X - SystemInformation.FrameBorderSize.Width;
yOffset = -e.Y - SystemInformation.FrameBorderSize.Height;
mouseOffset = new Point(xOffset, yOffset);
isMouseDown = true;
}
} private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
Point mousePos;
if (isMouseDown)
{
//MousePosition包含鼠标光标相对于屏幕左上角的坐标
mousePos = Control.MousePosition;
//注意到鼠标在拖动时相对于窗口坐标不变
mousePos.Offset(mouseOffset.X, mouseOffset.Y);
//Location表示控件的左上角相对于其容器的左上角,
//如果 Control 是 Form,那么 Location 属性值表示 Form 的左上角(以屏幕坐标表示)。
Location = mousePos;
}
} private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
// 修改鼠标状态isMouseDown的值
// 确保只有鼠标左键按下并移动时,才移动窗体
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
} wish u good luck
Greatsft
谢谢你的代码,但是这样的效果是没有出现一个框的,就是看不到移动后的效果,不过还是非常感谢。
不知道有没有办法做到呢?
这样的话你只有用某些做图软件比如photoshop单独做一个边框的背景图片,
然后把你的窗体的背景图片设置为这个图片即可!
很方便的 wish u good luck
Greatsft