'窗体
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
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
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货