设置richtextbox的enabled属性为true,locked属性为true: 窗体上一个richtextbox: Option ExplicitPrivate Sub Form_Load() Hook Me.RichTextBox1.hwnd End SubPrivate Sub Form_Unload(Cancel As Integer) UnHook Me.RichTextBox1.hwnd End Sub 模块代码: Option Explicit 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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Const GWL_WNDPROC = -4 Public Const WM_SYSCOMMAND = &H112 Public Const WM_NCRBUTTONDOWN = &HA4 Public Const SC_CLOSE = &HF060& Public Const EM_SETSEL = &HB1 Public Const WM_LBUTTONDOWN = &H201Global lpPrevWndProc As LongPublic Sub Hook(ByVal hwnd As Long) lpPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc) End SubPublic Sub UnHook(ByVal hwnd As Long) Dim lngReturnValue As Long lngReturnValue = SetWindowLong(hwnd, GWL_WNDPROC, lpPrevWndProc) End SubFunction WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If uMsg = WM_LBUTTONDOWN Then Debug.Print "haha" Else WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam) End If End Function
窗体上一个richtextbox:
Option ExplicitPrivate Sub Form_Load()
Hook Me.RichTextBox1.hwnd
End SubPrivate Sub Form_Unload(Cancel As Integer)
UnHook Me.RichTextBox1.hwnd
End Sub
模块代码:
Option Explicit
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
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = -4
Public Const WM_SYSCOMMAND = &H112
Public Const WM_NCRBUTTONDOWN = &HA4
Public Const SC_CLOSE = &HF060&
Public Const EM_SETSEL = &HB1
Public Const WM_LBUTTONDOWN = &H201Global lpPrevWndProc As LongPublic Sub Hook(ByVal hwnd As Long)
lpPrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End SubPublic Sub UnHook(ByVal hwnd As Long)
Dim lngReturnValue As Long
lngReturnValue = SetWindowLong(hwnd, GWL_WNDPROC, lpPrevWndProc)
End SubFunction WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_LBUTTONDOWN Then
Debug.Print "haha"
Else
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End If
End Function