Option ExplicitPublic Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen 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 Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Private Const SWP_NOZORDER = &H4 Private Const SWP_NOSIZE = &H1 Private Const SWP_NOMOVE = &H2 Private Const SWP_DRAWFRAME = &H20 Private Const WS_THICKFRAME = &H40000 Private Const GWL_STYLE = (-16) Private Const WS_SYSMENU = &H80000 Public Const GWL_WNDPROC = (-4) Public Const WM_GETMINMAXINFO = &H24 Public OldWindowProc As LongPrivate Type POINTAPI x As Long y As Long End TypePrivate Type MINMAXINFO ptReserved As POINTAPI ptMaxSize As POINTAPI ptMaxPosition As POINTAPI ptMinTrackSize As POINTAPI ptMaxTrackSize As POINTAPI End Type'限制窗体大小为620*497(子类化技术) Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long) As Long If Msg = WM_GETMINMAXINFO Then Dim MinMax As MINMAXINFO CopyMemory MinMax, ByVal lp, Len(MinMax) MinMax.ptMinTrackSize.x = 620 MinMax.ptMinTrackSize.y = 492 CopyMemory ByVal lp, MinMax, Len(MinMax) WndProc = 1 Exit Function End If WndProc = CallWindowProc(OldWindowProc, hwnd, Msg, wp, lp) End Function'控制指定窗体是否可以调整大小(可以把controlName声明为object就可以调整任何控件了) Public Sub ControlSize(ByVal controlName As Form, setTrue As Boolean) Dim dwStyle As Long dwStyle = GetWindowLong(controlName.hwnd, GWL_STYLE) If setTrue Then dwStyle = dwStyle Or WS_THICKFRAME Else dwStyle = dwStyle - WS_THICKFRAME End If dwStyle = SetWindowLong(controlName.hwnd, GWL_STYLE, dwStyle) SetWindowPos controlName.hwnd, controlName.hwnd, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME End Sub
有资料
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen 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
Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_DRAWFRAME = &H20
Private Const WS_THICKFRAME = &H40000
Private Const GWL_STYLE = (-16)
Private Const WS_SYSMENU = &H80000
Public Const GWL_WNDPROC = (-4)
Public Const WM_GETMINMAXINFO = &H24
Public OldWindowProc As LongPrivate Type POINTAPI
x As Long
y As Long
End TypePrivate Type MINMAXINFO
ptReserved As POINTAPI
ptMaxSize As POINTAPI
ptMaxPosition As POINTAPI
ptMinTrackSize As POINTAPI
ptMaxTrackSize As POINTAPI
End Type'限制窗体大小为620*497(子类化技术)
Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long) As Long
If Msg = WM_GETMINMAXINFO Then
Dim MinMax As MINMAXINFO
CopyMemory MinMax, ByVal lp, Len(MinMax)
MinMax.ptMinTrackSize.x = 620
MinMax.ptMinTrackSize.y = 492
CopyMemory ByVal lp, MinMax, Len(MinMax)
WndProc = 1
Exit Function
End If
WndProc = CallWindowProc(OldWindowProc, hwnd, Msg, wp, lp)
End Function'控制指定窗体是否可以调整大小(可以把controlName声明为object就可以调整任何控件了)
Public Sub ControlSize(ByVal controlName As Form, setTrue As Boolean)
Dim dwStyle As Long
dwStyle = GetWindowLong(controlName.hwnd, GWL_STYLE)
If setTrue Then
dwStyle = dwStyle Or WS_THICKFRAME
Else
dwStyle = dwStyle - WS_THICKFRAME
End If
dwStyle = SetWindowLong(controlName.hwnd, GWL_STYLE, dwStyle)
SetWindowPos controlName.hwnd, controlName.hwnd, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME
End Sub
你这段代码只能对自身窗口才有用吧,我主要是想钩住别的窗体的信息。