怎么实现像qq那样能自动向屏幕边上隐藏,鼠标移动过去后又自动出来?80分哦!

解决方案 »

  1.   

    在窗体上加一个计时器控件,然后:
    private sub Timer1_timer()
      if me.top<10 then me.top=-me.height+10
    end subprivate sub mouse_move(....)
      if x<10 then me.top=100
    end sub
      

  2.   

    Option Explicit
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongPrivate Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End Type
    Private Type POINTAPI
            X As Long
            Y As Long
    End TypePrivate Const HWND_TOPMOST = -1
    Private Const SWP_NOSIZE = &H1
    Private Const SWP_NOMOVE = &H2
    Private Const HWND_TOP = 0
    Private Const SWP_NOACTIVATE = &H10
    Private Const SWP_SHOWWINDOW = &H40
    Private Sub Form_Load()
        SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
    End SubPrivate Sub Timer1_Timer()
        Dim p As POINTAPI
        Dim f As RECT
        GetCursorPos p
        GetWindowRect Me.hwnd, f
        If Me.WindowState <> 1 Then
            If p.X > f.Left And p.X < f.Right And p.Y > f.Top And p.Y < f.Bottom Then
           
                If Me.Top < 0 Then
                    Me.Top = -10
                    Me.Show
                ElseIf Me.Left < 0 Then
                    Me.Left = -10
                    Me.Show
                ElseIf Me.Left + Me.Width >= Screen.Width Then
                    Me.Left = Screen.Width - Me.Width + 10
                    Me.Show
                End If
        
            Else
                If f.Top <= 4 Then
                    Me.Top = 40 - Me.Height
                ElseIf f.Left <= 4 Then
                    Me.Left = 40 - Me.Width
                ElseIf Me.Left + Me.Width >= Screen.Width - 4 Then
                    Me.Left = Screen.Width - 40
                End If
            End If
        End IfEnd Sub
      

  3.   

    因為前斷時間資料丟失過﹐沒有找到原來自己做的哪個﹐剛從網上找了這個﹐2K+VB6.O+SP5環境下測試通過。但是效果沒有偶原來做的好﹐呵呵~~但是可以給樓主參考一下
      

  4.   

    做了一个比较粗糙的实现方法,还需要继续改进。一个form 两个timerOption ExplicitDim State As Boolean    '用来表示窗体目前是否隐藏
    Dim Direct As IntegerPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Not State Then
            Timer1.Enabled = True
            Timer1.Interval = 1500
            Direct = 1
        Else
            Timer2.Enabled = True
            Direct = 2
        End If
        DoEvents
    End SubPrivate Sub Timer1_Timer()
        If Not State Then
            If Me.Left < 0 Then
                Me.Height = Screen.Height
                Me.Width = 3000
                Me.Top = 0
                Me.Left = 0
                Timer1.Enabled = False
        
                Timer2.Interval = 10
                Timer2.Enabled = True
            ElseIf Me.Top < 0 Then
                '向上
            ElseIf Me.Left > Screen.Width - Me.Width Then
                '向右
            End If
        Else
            Direct = 1
            Timer2.Interval = 10
            Timer2.Enabled = True
        End If
    End SubPrivate Sub Timer2_Timer()
        If Direct = 1 Then
            Me.Left = Me.Left - 50
        Else
            If Me.Left = 0 Then Exit Sub        Me.Left = Me.Left + 50
        End If
        If Me.Left < 150 - Me.Width Then
            Timer2.Enabled = False
            Me.Left = 150 - Me.Width
            State = True
            Timer1.Enabled = True
        End If
        If Me.Left > 0 Then
            Timer2.Enabled = False
            Me.Left = 0
            State = True
            Timer1.Enabled = True
        End If
    End Sub