private void panel1_MouseDown(object sender, MouseEventArgs e)
{
CPoint = new Point(-e.X, -e.Y);
} private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point myPosittion = Control.MousePosition;
myPosittion.Offset(CPoint.X, CPoint.Y);
this.DesktopLocation = myPosittion;
}
}大家请看上面的这个程序为什么CPoint = new Point(-e.X, -e.Y)中的X和Y坐标是负值呢,还有myPosittion.Offset(CPoint.X, CPoint.Y)这个方法是用来干什么的?
{
CPoint = new Point(-e.X, -e.Y);
} private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point myPosittion = Control.MousePosition;
myPosittion.Offset(CPoint.X, CPoint.Y);
this.DesktopLocation = myPosittion;
}
}大家请看上面的这个程序为什么CPoint = new Point(-e.X, -e.Y)中的X和Y坐标是负值呢,还有myPosittion.Offset(CPoint.X, CPoint.Y)这个方法是用来干什么的?
解决方案 »
- RemoveMenu后怎么恢复?
- 请问大家在写代码的时候什么时候考虑用泛型?
- 软件打包是不是用Release出来的结果会更快
- 2011092901
- SaveFileDialog问题,怎样改正
- 用Response.Redirect("WebForm2.aspx");可以指向WebForm2,请问如何使WebForm2在一个新的窗口中打开?
- 关于DataGrid数据的更新问题?
- 实在是不会了,。这样把一个XML文件通过编程的方式,嵌入到一个资源文件中啊????
- DateTimePicker默认修改为月份
- C#数据绑定将一个Excel 表格绑定到一个Datagridview出现问题
- 以下代码在win7可以,win8就不行,为什么?
- c# 分钟转化成天数的问题
| |
| m |
| |
|---------|
假设有这么一个窗口。它的位置(Location)就是它的左上角的坐标。
当鼠标点击m点后开始拖动,如何计算拖动后的新坐标呢?一种方法就是算出m到L的偏移量,比如例子中为向左4格,向上3格。当鼠标移动到m'后,可以期待窗口也被拖动到新的位置,新窗口的L也将是新m'的向左4格,向上3格。也就是说对m'施用相同的偏移,就可以得到新的Location。在panel1_MouseDown事件中, MouseEventArgs e的鼠标位置是相对于窗口的,即窗口的左上角为(0,0)。
这时,偏移量很容易得到,既(-e.X, -e.Y)。
首先,不是减去m的坐标。而是施用偏移量,这里的偏移量不是位置,而是大小(或者叫向量)。
在panel1_MouseDown中计算偏移量就是: L - e.Location
而在panel1_MouseDown中坐标原点在L,就是L = 0,所以偏移量= -e.Location。