当前位置:学海荡舟 -> 电脑乐园 -> 拖动无边框窗体




  趣 味 程 序
--趣味程序源码注解--拖动无边框窗体--
下一节

  一般情况下我们拖动一个窗体,必须把鼠标点在标题栏上才能拖动。但有时为了实现风格独特的窗体,我们会使用没有标题栏的窗体,这时怎么来拖动窗体呢?本例会给你答案。

  为了学习方便,提供的源码已经作了详细的中文注释,看看源码框中的代码:


(源程序下载)

  程序实现的思路是在窗体的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

  很简单就能移动无标题栏窗体了,这样我们也就解决了“可以换肤的窗体”一节中所提出的问题,那赶快把这节的方法运用到那里去吧。

相关链接: 看实例学VB  可以换肤的窗体
上一节  下一节