VB.Net实现QQ窗体浮动效果的方法 |
实现功能:像QQ那样当窗体被移动到屏幕的最上方时,当鼠标不在窗体范围内时窗体自动浮动上升到屏幕上方,(此时窗体露出很小一个尺寸在屏幕范围内),当鼠标移动到窗体内时窗体自动下降到屏幕内。
我曾经尝试过用vb6.0来实现这个功能。现在发现6.0实在是比较弱,在获得鼠标坐标的时候要调用API函数。而.net中直接有me.mouseposition.x和me.mouseposition.y属性,使用起来相当方便。
以下来分析下要实现这个功能要考虑哪些问题。
1.什么时候窗体自动上升?
当窗体被移动到屏幕上方以外或者在临界位置,即me.location.y<=0时
2.什么时候窗体自动下降?
当鼠标移动到窗体上时,并且此时窗体处于屏幕上方或者正在向上放移动过程中。
3.窗体上升时上升到什么位置?
要保证窗体的一部分在屏幕内,这样以后才能把鼠标移动到窗体上使之下降。在这里我取得尺寸是3twip.
小于3twip是不合适的。
okay,考虑完这些问题,看看该怎么实现的,需要用到哪些事件,控件。。。
timer要用到两个,一个用来实现上升。一个用来实现下降。
判断鼠标是否在窗体内直接用鼠标的坐标来判断。虽然mousemove,mousehover可以判断鼠标是否在窗体内,但当鼠标在标题栏上是无法判断的。因为鼠标在标题栏上时是不触发mousemove和mousehover时间的。
hah... following is the code.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
with timer1
.enable=true
.interval=1
end with
with timer2
.enable=true
.interval=1
end with
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If Me.MousePosition.X >= Me.Location.X And Me.MousePosition.X <= Me.Location.X + Me.Width And Me.MousePosition.Y >= Me.Location.Y And Me.MousePosition.Y <= Me.Location.Y + Me.Height Then Timer2.Enabled = False If Me.Location.Y <= 0 Then Me.Location = New Point(Me.Location.X, 0) End If Else Timer2.Enabled = True End If End Sub Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick Dim i As Int16 Dim size As Decimal If Me.Location.Y <= 0 And Me.Location.Y + Me.Height > 3 Then i = 5 size = (Me.Location.Y + Me.Height - 3) / 5 For i = 1 To 5 Me.Location = New Point(Me.Location.X, Me.Location.Y - size) Next i End If End Sub End Class |
VB.Net实现QQ窗体浮动效果的方法
最新推荐文章于 2018-12-05 21:38:14 发布