Private Declare Function SetCapture Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long 
然后,我们可以在控件(以 Picture1 为例)的 MouseMove 事件上加上以下代码: 
If (0 <= X) And (X <=Picture1.Width And (0 <=Y) And (Y <=Picture1.Height) 
 Then 
SetCapture Picture1.hWnd '鼠标进入
Else 
ReleaseCapture '鼠标退出
End If

解决方案 »

  1.   

    to ttyp:
       好!这20分是你的了!
       不过,少等,我还有问题:
             用你的办法,可以实现!但是:
                  1、vb的mousemove不是很敏感,有时会漏掉!
                  2、如果用户控件不是规则矩形,使用 obj.WIDTH 和 HEIGHT 等属性判断就会有很大误差,如何解决。   我再加60分,每小题30分,盼有高手解之!
      

  2.   

    1.只要你按ttyp说的作,肯定没问题。注意处理一下button的状态,好像windows在按下
    和抬起left button时会自动set/release capture.2.有个API函数PtInRegion可以做到判断点是否在不规则矩形内部
    VB有个HitTest Event你也可以看一下
      

  3.   

    如果只是不规则的按钮有个笨办法!用getwindowfrompoint 返回鼠标所指的控件 hwnd再判断是否是commandbutton 的hwnd就可以了。不过要定时检查。
      

  4.   

    如果只是不规则的按钮有个笨办法!用getwindowfrompoint 返回鼠标所指的控件 hwnd再判断是否是commandbutton 的hwnd就可以了。不过要定时检查。