vb.net实现类似QQ窗体的浮动效果

http://seraphic_zju.52blog.net/logs/2365433.html

实现功能:像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时间的。
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        With Timer1
            .Enabled = True
            .Interval = 1
        End With
        With Timer2
            .Enabled = True
            .Interval = 1
        End With
    End Sub
    Private Sub Tier1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If Control.MousePosition.X >= Me.Location.X And Control.MousePosition.X <= Me.Location.X + Me.Width And Control.MousePosition.Y >= Me.Location.Y And Control.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.net2005测试可行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值