vb里面好像没有那个事件?做个定时器好像有点极端,那位大侠指点小弟一下,谢谢!

解决方案 »

  1.   

    用subclass
    在里边加上对这个消息的判断
    用    SetWindowLong(hWnd, GWL_WNDPROC, WndProcPrev)  'Restore the previous WndProc
    然后捕获WM_MOVE进行处理你的代码
      

  2.   

    在mousedown/mousemove/mouseup 中写代码。
      

  3.   

    form load中
        ProcOld = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
    unload中
            Call SetWindowLong(hwnd, GWL_WNDPROC, ProcOld)
    WindowProc中进行处理
    Public Function WindowProc(ByVal hwnd As Long, ByVal iMsg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
    On Error GoTo handle_err    Select Case iMsg
        Case WM_MOVE
         '*****************************8
        Case Else
      
            WindowProc = CallWindowProc(ProcOld, hwnd, iMsg, wParam, lParam)
        End Select
        
    handle_exit:
        Exit Function
        
    handle_err:    If ProcOld <> 0 Then
            Call SetWindowLong(hwnd, GWL_WNDPROC, ProcOld)
        End If
        MsgBox Err.Description
        Resume handle_exit
        
    End Function
      

  4.   

    --------------------------------------------------------------------------------
    给你罗列了一点窗口消息,你自己看看吧:
    =======================
    '''form代码:
    Private Sub Form_Load()
        prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
        SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc
    End Sub'''新建一个模块,代码:
    Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
    Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    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
    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 SC_MAXIMIZE = &HF030&
    Public Const SC_MINIMIZE = &HF020&
    Public Const SC_SIZE = &HF000
    Public Const SC_CLOSE = &HF060
    Public Const WM_SYSCOMMAND = &H112
    Public Const SC_DEFAULT = &HF160
    Public Const WM_NCLBUTTONDBLCLK = &HA3
    Public Const SC_RESTORE = &HF120&Public prevWndProc As Long        ''''默认窗口程序地址Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    On Error GoTo ShowErr    If Msg = WM_SYSCOMMAND Then
            If wParam = SC_RESTORE Then
                MsgBox "窗体恢复原状!"
                'Exit Function     '''这里如果被使用了,则移除相关操作,可以尝试使其有效
            ElseIf wParam = SC_MAXIMIZE Then
                MsgBox "窗体最大化!"
                'Exit Function
            ElseIf wParam = SC_MINIMIZE Then
                MsgBox "窗体最小化!"
                'Exit Function
            Else
                WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
            End If
        ElseIf Msg = WM_NCLBUTTONDBLCLK Then
            MsgBox "你双击了标题栏!"
            'Exit Function
        End If
        
        WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
        Exit Function
    ShowErr:
        WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
        Exit Function
    End Function
      

  5.   

    移动就是截获  WM_MOVE 消息楼上有写的了