home *** CD-ROM | disk | FTP | other *** search
- Attribute VB_Name = "ResizeMod"
- Option Explicit
-
- Public lngMinHeight As Long
- Public lngMinWidth As Long
- Public lngMaxHeight As Long
- Public lngMaxWidth As Long
-
- Public lpPrevWndProc As Long
- Public lngHwnd As Long
-
- Private Const GWL_WNDPROC = -4
- Private Const WM_GETMINMAXINFO = &H24
-
- 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
-
- 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 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.
- If lngMinHeight <> 0 Then
- MinMax.ptMinTrackSize.y = lngMinHeight / Screen.TwipsPerPixelY
- End If
- If lngMinWidth <> 0 Then
- MinMax.ptMinTrackSize.x = lngMinWidth / Screen.TwipsPerPixelX
- End If
-
- 'Specify new maximum size for window.
- If lngMaxHeight <> 0 Then
- MinMax.ptMaxTrackSize.y = lngMaxHeight / Screen.TwipsPerPixelY
- End If
- If lngMaxWidth <> 0 Then
- MinMax.ptMaxTrackSize.x = lngMaxWidth / Screen.TwipsPerPixelX
- End If
-
- 'Copy local structure back.
- CopyMemoryFromMinMaxInfo lParam, MinMax, Len(MinMax)
-
- WindowProc = DefWindowProc(hw, uMsg, wParam, lParam)
- Else
- WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, _
- wParam, lParam)
- End If
- End Function
- Public Sub Unhook()
- Dim temp As Long
-
- 'Cease subclassing.
- temp = SetWindowLong(lngHwnd, GWL_WNDPROC, lpPrevWndProc)
- End Sub
- Public Sub Hook()
- 'Start subclassing.
- lpPrevWndProc = SetWindowLong(lngHwnd, GWL_WNDPROC, AddressOf WindowProc)
- End Sub
- Public Property Get hWnd() As Long
- hWnd = lngHwnd
- End Property
- Public Property Let hWnd(ByVal lngNewValue As Long)
- lngHwnd = lngNewValue
- End Property
-
-