VB中实现窗体自动隐藏

王朝vb·作者佚名  2006-01-08
宽屏版  字体: |||超大  

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

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 Long

Private 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 Type

Private 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 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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有