(源程序下载)
程序实现的思路是在窗体的MouseDown事件(当鼠标在窗体上按下时发生)中获取鼠标相对于窗体的坐标,在MouseOver事件(当鼠标移动时发生)中获取新的鼠标坐标值,显然这两个坐标值的差加上窗体原来的坐标,就是窗体应该移动到的新的坐标值。然后采用From.Move方法把窗体位置移动到新坐标值处即可。
先来看看MouseDown、MouseMove、MouseUp事件的使用方法,其语法如下:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
其中各个参数的意义如列表所示:
| 属性 | 意义 |
| button | 返回一个整数,用来标识按下或释放的是哪一个按钮。button 参数的值为相应于左按钮(1)右按钮(2),以及中间按钮(4)。 |
| shift | 返回一个整数,在鼠标按钮被按下或者被释放的同时,SHIFT,CTRL,和 ALT 键的状态,返回的shift 参数值分别为1,2,和 4。指示这些键的状态。 |
| x, y | 返回一个指定鼠标指针当前位置的数 |
下面是实现的步骤:
1、在MouseDown事件发生时判断按键状态并获取鼠标位置:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'如果是鼠标左键按下
If Button = 1 Then
'标示为移动状态
MoveScreen = True
'得到鼠标在窗体上的位置(相对与窗体内部坐标)
MousX = X
MousY = Y
End If
End Sub
2、当鼠标MouseMove事件发生时,计算新的窗体坐标,并移动:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) '如果处于鼠标左键按下的状态,即MoveScreen = True时
If MoveScreen Then
'计算新的窗体坐标值
CurrX = Form1.Left - MousX + X
CurrY = Form1.Top - MousY + Y
'移动窗体到新的位置
Form1.Move CurrX, CurrY
End If
End Sub
很简单就能移动无标题栏窗体了,这样我们也就解决了“可以换肤的窗体”一节中所提出的问题,那赶快把这节的方法运用到那里去吧。