有这个事件吗?没有吧...你可以用子类技术,拦截WM_MOVE事件!

解决方案 »

  1.   

    'Form1
    Option ExplicitPrivate Sub Form_Load()
        procOld = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SysProc)    '获得原消息处理句柄,并将消息处理转交自定义函数
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        SetWindowLong hwnd, GWL_WNDPROC, procOld
    End Sub
    'Module1
    Option ExplicitPublic Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Const GWL_WNDPROC = (-4)
    Public Const WM_SYSCOMMAND = &H112
    Public Const WM_MOVE = &H3Public procOld As LongPublic Function SysProc(ByVal hwnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Static i As Integer, j As Integer
        SysProc = CallWindowProc(procOld, hwnd, iMsg, wParam, lParam)
        If iMsg = WM_MOVE Then MsgBox "Move"
    End Function
      

  2.   

    放个Timer检查窗体移动,不知成不?
      

  3.   


     griefforyou(为你伤心)  的是对的。VB没把WM_MOVE做成事件,倒霉呀~~~~~~
      

  4.   

    griefforyou(为你伤心) ,我试了你的这种方法,确实能捕获到窗体的移动,但是我发现无论怎么移动,在程序中检测窗体的坐标好象都没有变似的。不知道是怎么回事!
      

  5.   

    你要检测坐标就要拦截 WM_MOVING 消息了。注意区别!
      

  6.   

    楼上的,怎么拦截WM_MOVIING消息呢?