'窗体
Option Explicit
Private Sub Form_Load()
    Me.Width = 400 * 15
    Me.Height = 200 * 15
    Call SubClass(Me.hwnd)
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Call UnSubClass(Me.hwnd)
End Sub'模块
Option Explicit
Public defWindowProc As Long
Public minX As Long
Public minY As Long
Public maxX As Long
Public maxY As LongPublic Const GWL_WNDPROC As Long = (-4)
Public Const WM_GETMINMAXINFO As Long = &H24Public Type POINTAPI
    x As Long
    y As Long
End TypeType MINMAXINFO
    ptReserved As POINTAPI
    ptMaxSize As POINTAPI
    ptMaxPosition As POINTAPI
    ptMinTrackSize As POINTAPI
    ptMaxTrackSize As POINTAPI
End TypePublic 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 uMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) As LongPublic Declare Sub CopyMemory Lib "kernel32" _
   Alias "RtlMoveMemory" _
   (hpvDest As Any, _
    hpvSource As Any, _
    ByVal cbCopy As Long)
Public Sub SubClass(hwnd As Long)   On Error Resume Next
   defWindowProc = SetWindowLong(hwnd, _
                                 GWL_WNDPROC, _
                                 AddressOf WindowProc)
   
End Sub
Public Sub UnSubClass(hwnd As Long)   If defWindowProc Then
      SetWindowLong hwnd, GWL_WNDPROC, defWindowProc
      defWindowProc = 0
   End If
   
End Sub
Public Function WindowProc(ByVal hwnd As Long, _
                           ByVal uMsg As Long, _
                           ByVal wParam As Long, _
                           ByVal lParam As Long) As Long         
         On Error Resume Next
          
         Select Case uMsg
            
            Case WM_GETMINMAXINFO
                 
                  Dim MMI As MINMAXINFO
                  
                  CopyMemory MMI, ByVal lParam, LenB(MMI)
      
                   With MMI
                      .ptMinTrackSize.x = 400
                      .ptMinTrackSize.y = 200
                      .ptMaxTrackSize.x = 400
                      .ptMaxTrackSize.y = 200
                  End With
      
                  CopyMemory ByVal lParam, MMI, LenB(MMI)
                 
                  WindowProc = 0
                    
              Case Else
              
                   WindowProc = CallWindowProc(defWindowProc, _
                                               hwnd, _
                                               uMsg, _
                                               wParam, _
                                               lParam)
                  
          End Select
   
End Function