在Resize事件中实现判断me.windowstate的值来区别最大化、最小化还是别的。Private Sub Form_Resize()
If Me.WindowState = 1 Then
    '最小化
End If
If Me.WindowState = 2 Then
    '最大化
End If
End Sub

解决方案 »

  1.   

    SetWindowLong把原来的窗口函数替换掉
      

  2.   

    SetWindowLong
    检测syscommand消息
      

  3.   

    form code
    Option Explicit
    Private Sub Form_Load()
        oldwinproc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
        SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf OnMenu
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
        SetWindowLong Me.hWnd, GWL_WNDPROC, oldwinproc
    End Submodule code
    Option ExplicitPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public 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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Public Const GWL_WNDPROC = (-4)
    Public oldwinproc As Long
    Public Const WM_SYSCOMMAND = &H112Public Function OnMenu(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Select Case wMsg
            Case WM_SYSCOMMAND
                Select Case wParam
                    Case 61472
                        Debug.Print "minimize"
                    Case 61728
                        Debug.Print "restore"
                    Case 61488
                        Debug.Print "maximize"
                End Select
        End Select
        OnMenu = CallWindowProc(oldwinproc, hWnd, wMsg, wParam, lParam)
    End Function
      

  4.   

    this version can detect close button clicked
    Option ExplicitPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public 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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Public Const GWL_WNDPROC = (-4)
    Public oldwinproc As Long
    Public Const WM_SYSCOMMAND = &H112Public Function OnMenu(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Select Case wMsg
            Case WM_SYSCOMMAND
                Select Case wParam
                    Case 61472
                        Debug.Print "minimize"
                    Case 61728
                        Debug.Print "restore"
                    Case 61488
                        Debug.Print "maximize"
                    Case 61536
                        Debug.Print "close"
                End Select
        End Select
        OnMenu = CallWindowProc(oldwinproc, hWnd, wMsg, wParam, lParam)
    End Function