正文

使用vb6.0实现无标题栏窗体的平滑移动2006-07-27 18:10:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hotphen/16873.html

分享到:

先说一下目前网络上流传的一种移动方法,这种方法的实现原理其实很简单,它是通过计算鼠标按下和放起的坐标差来确定移动后窗体的位置。首先在窗体的MouseDown事件中记录下移动前鼠标的位置,然后在MouseUp事件中也记录下鼠标的位置,通过计算这两个坐标的差值就可以确定窗体移动后的位置。这种方法的缺点是移动的时候跳跃感很明显,感觉比较别扭。 通过简单的API调用可以很好地实现无标题栏窗体的移动,可以不夸张地说没这种方法实现的效果比Microsoft做的还要好,而且实现也很简单,下面我们来看看这是怎么实现的。 使用的API函数Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long该函数可以获得鼠标在屏幕上的位置坐标,并把赋给一个POINTAPI类型变量。POINTAPI的定义如下Private Type POINTAPI        X As Long        Y As LongEnd Type 下面我们来实际的操作,首先建立一个标准EXE工程,把Form1的BorderStyle设为0-None,这样窗体的标题栏就没有了,进入窗体的代码界面输入下面的代码 '定义POINTAPI类型Private Type POINTAPI        X As Long        Y As LongEnd Type'API函数声明Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long'定义一个用于记录鼠标起始位置坐标的POINTAPI变量Dim scrPT As POINTAPI'在窗体的MouseDown事件中用API函数返回鼠标起始坐标Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)    If Button = 1 Then'判断是不是点击了左键        GetCursorPos scrPT'记录鼠标坐标    End IfEnd Sub '在每一次MouseMove事件中进行坐标处理Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)         If Button = 1 Then            '定义一个用于记录鼠标新位置的POINTAPI变量            Dim pt As POINTAPI              '获得新坐标            GetCursorPos pt             '计算鼠标位移,相应的调整窗体位置            Me.Left = Me.Left + (pt.X - scrPT.X) * 15            Me.Top = Me.Top + (pt.Y - scrPT.Y) * 15            '把新坐标变量值赋给旧坐标变量            scrPT = pt            '下一次事件触发,如此循环就可以事件窗体的平滑移动。        End If End Sub 欢迎大家留言讨论。 <完>

阅读(5131) | 评论(4)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册