使用了二个API:
GetCursorPos(lpPoint As POINTAPI) as Long
ScreenToClient(ByVal hwnd As Long, lpPoint As POINTAPI) as Long
这两个API是用来实现“金山快译”的自动收缩效果的。
'最重要的是判断鼠标的位置是否在窗体中的事件,如下:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Isout = False
Me.Top = 0
Do While Isout = False '然后通过循环来判断,直到移出标志为True
GetCursorPos MyPoint '获得当前鼠标位置,并放在结构MyPoint中,单位为象素
ScreenToClient Me.hwnd, MyPoint '使结构的坐标成为对应程序中的坐标
If MyPoint.x < 0 Or MyPoint.y < -10 Or _
MyPoint.x > Me.Width / 15 Or MyPoint.y > Me.Height / 15 Then
'统一转化为象素后比较(横坐标小于0或大于窗体宽,纵坐标小于-10或大于窗体高)
'如果条件成立则表示已经不在窗体内,这里纵坐标不要写成MyPoint.y<0,因为尽管窗体的To
'p =0 紧贴在窗体顶部,但是单单小于0还是可以让鼠标划得到,而(-10)则无论如何也不可能点
'得到了.
Isout = True '置标志为True
Me.Top = Int(-0.8 * Me.Height) '再次隐藏
Exit Sub '退出过程
End If
DoEvents '要记得交还控制权给系统
Loop
End Sub