1. 모듈에 다음의 API 함수 및 상수를 선언합니다.
Public OldWindowProc As Long
Public 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
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(pDest As Any, _
pSource As Any, _
ByVal ByteLen As Long)
Public 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 Const WM_GETMINMAXINFO = &H24
Public Const GWL_WNDPROC = (-4)
Public Type POINTAPI
x As Long
y As Long
End Type
Public Type MINMAXINFO
ptReserved As POINTAPI
ptMaxSize As POINTAPI
ptMaxPosition As POINTAPI
ptMinTrackSize As POINTAPI
ptMaxTrackSize As POINTAPI
End Type
Public Function SubClass1_WndMessage(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long) As Long
Dim MinMax As MINMAXINFO
If Msg = WM_GETMINMAXINFO Then
CopyMemory MinMax, ByVal lp, Len(MinMax)
' 폼의 최소 크기를 300 X 200 으로 제한한다.
MinMax.ptMinTrackSize.x = 300
MinMax.ptMinTrackSize.y = 200
' 폼의 최대 크기를 600 X 400 으로 제한한다.
MinMax.ptMaxTrackSize.x = 600
MinMax.ptMaxTrackSize.y = 400
CopyMemory ByVal lp, MinMax, Len(MinMax)
SubClass1_WndMessage = 1
Exit Function
End If
SubClass1_WndMessage = CallWindowProc(OldWindowProc, hwnd, Msg, wp, lp)
End Function
2. 폼에서 폼의 Load 와 Unload 이벤트에 다음과 같이 코딩합니다.
Private Sub Form_Load()
OldWindowProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
Call SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf SubClass1_WndMessage)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call SetWindowLong(Me.hwnd, GWL_WNDPROC, OldWindowProc)
End Sub
Private Sub ShowTbox_Click()
Dim ret As Integer
If doShow = False Then
' 폼을 Floating 으로 0, 0 좌표에 띄운다
ret = SetParent(Form2.hWnd, Me.hWnd)
Form2.Left = 0
Form2.Top = 0
Form2.Show
doShow = True
Showtbox.Caption = "Hide Toolbox"
Else
Form2.Hide
doShow = False
Showtbox.Caption = "Show Toolbox"
End If
End Sub