Option Explicit
Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(pDest As Any, pSource As Any, ByVal ByteLen As Long)
Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function CallWindowProc Lib "user32" _
Alias "CallWindowProcA" _
(ByVal wndrpcPrev As Long, ByVal hWnd As Long, _
ByVal uMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const GWL_USERDATA = (-21)
Public Const GWL_WNDPROC = -4
Declare Function GetSystemMenu Lib "user32" _
(ByVal hWnd As Long, ByVal bRevert As Long) As Long
Declare Function AppendMenu Lib "user32" _
Alias "AppendMenuA" (ByVal hMenu As Long, _
ByVal wFlags As Long, ByVal wIDNewItem As Long, _
ByVal lpNewItem As String) As Long
Declare Function EnableMenuItem Lib "user32" _
(ByVal hMenu As Long, ByVal wIDEnableItem As Long, _
ByVal wEnable As Long) As Long
Public Const MF_SEPARATOR = &H800&
Public Const MF_GRAYED = &H1&
Public Const MF_STRING = &H0&
Public Const WM_SYSCOMMAND = &H112
Public Const WM_INITMENUPOPUP = &H117
Public Function frmProc _
(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Dim frm As Form1
Dim pObj As Long
pObj = GetWindowLong(hWnd, GWL_USERDATA)
CopyMemory frm, pObj, 4
frmProc = frm.WindowProc(hWnd, uMsg, wParam, lParam)
CopyMemory frm, 0&, 4
End Function
|