VB中实现窗体自动隐藏

    技术2022-05-11  156

    OICQ聊天时的窗体自动隐藏功能,用VC 或CBC都可以很简单地实现,前几天看到有一则用CBC实现的例子,便想用VB实现一下,可惜当窗体上放满控件时,FORM的MOUSEMOVE事件不能很好地触发,所以只好用以下的笨办法,现把代码贴上,窗体上需放一TIMER控件,Interval属性为200。大伙如有好的意见,不妨贴出来,让我学习学习。

    Option Explicit

    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As LongPrivate 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 Long

    Private Type RECT        Left As Long        Top As Long        Right As Long        Bottom As LongEnd TypePrivate Type POINTAPI        X As Long        Y As LongEnd Type

    Private Const HWND_TOPMOST = -1Private Const SWP_NOSIZE = &H1Private Const SWP_NOMOVE = &H2Private Const HWND_TOP = 0Private Const SWP_NOACTIVATE = &H10Private Const SWP_SHOWWINDOW = &H40

    Private Sub Form_Load()'窗体放在最前面    SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZEEnd Sub

    Private Sub Timer1_Timer()    Dim p As POINTAPI    Dim f As RECT    GetCursorPos p  '得到MOUSE位置    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        'MOUSE 在窗体上            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 If

    End Sub


    最新回复(0)