Attribute VB_Name = "formLimiter" Option Explicit Private Const GWL_WNDPROC = -4 Private Const WM_GETMINMAXINFO = &H24 Private Const WS_MAXIMIZE = &H1000000 Private Const WM_EXITSIZEMOVE = &H232 Private Const WM_DISPLAYCHANGE = &H7E Private Const WM_SETTINGCHANGE = &H1A Private Const WM_DRAWITEM = &H2B Private Type POINTAPI X As Long Y As Long End Type Private Type MINMAXINFO ptReserved As POINTAPI ptMaxSize As POINTAPI ptMaxPosition As POINTAPI ptMinTrackSize As POINTAPI ptMaxTrackSize As POINTAPI End Type Global lpPrevWndProc As Long Global gHW As Long Private Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private 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 Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Sub CopyMemoryToMinMaxInfo Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As MINMAXINFO, ByVal hpvSource As Long, ByVal cbCopy As Long) Private Declare Sub CopyMemoryFromMinMaxInfo Lib "kernel32" Alias "RtlMoveMemory" (ByVal hpvDest As Long, hpvSource As MINMAXINFO, ByVal cbCopy As Long) Private Declare Function DrawMenuBar Lib "user32.dll" (ByVal hwnd As Long) As Long Public Sub Hook() 'Start subclassing. lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Sub Unhook() Dim Temp As Long 'Cease subclassing. Temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc) End Sub Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim MinMax As MINMAXINFO 'Check for request for min/max window sizes. If uMsg = WM_GETMINMAXINFO Then 'Retrieve default MinMax settings CopyMemoryToMinMaxInfo MinMax, lParam, Len(MinMax) 'Specify new minimum size for window. MinMax.ptMinTrackSize.X = 480 MinMax.ptMinTrackSize.Y = 324 'Specify new maximum size for window. MinMax.ptMaxTrackSize.X = 5000 MinMax.ptMaxTrackSize.Y = 5000 'Copy local structure back. CopyMemoryFromMinMaxInfo lParam, MinMax, Len(MinMax) WindowProc = DefWindowProc(hw, uMsg, wParam, lParam) Form2.Form_Resize Else WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam) If uMsg = WM_DRAWITEM Then Form2.Form_Resize End If If uMsg = WM_DISPLAYCHANGE Or uMsg = WM_SETTINGCHANGE Then menuOps.menuInit End If End If End Function