Public OldProc As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_CONTEXTMENU = &H7B&
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 lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Public Function TextWndProc(ByVal hWnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
If wMsg = WM_CONTEXTMENU Then
TextWndProc = 0
Exit Function
End If
TextWndProc = CallWindowProc(OldProc, hWnd, wMsg, wParam, lParam)
End Function
'窗体
Private Sub Form_Load
OldProc = GetWindowLong(Text1.hWnd, GWL_WNDPROC)
SetWindowLong Text1.hWnd, GWL_WNDPROC, AddressOf TextWndProc
End Sub
'解除禁止
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Text1.hWnd, GWL_WNDPROC, OldProc
End Sub
请问:
1.GWL_WNDPROC是该窗口的窗口函数的地址,那请问什么叫窗口的窗口函数的地址???
2.GetWindowLong的返回值OldProc指的是什么???
3.SetWindowLong函数的第三个参数是什么??为什么设置了函数的入口地址AddressOf TextWndProc,而解除禁止为什么还用了OldProc??
4. TextWndProc = CallWindowProc(OldProc, hWnd, wMsg, wParam, lParam) 在回调函数中,为什么一个要写CallWindowProc(OldProc, hWnd, wMsg, wParam, lParam),难道写TextWndProc=1或者TextWndProc=0不行吗???
请大家4个问题都回答下 ,谢谢