Const WM_CONTEXTMENU = &H7B
Сообщение WM_CONTEXTMENU посылается окну при нажатии пользователем правой кнопкой. Окно получает это сообщение через функцию обратного вызова WindowProc
Windows 95, Windows NT 3.51
Сообщение не возвращает значений
' Блокируем контекстное меню для текстового поля ' Поместите на форме два текстовых поля ' Добавьте код для модуля, т.к. используем ' функции обратного вызова Public Declare Function SetWindowLong Lib "user32" Alias _ "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, _ ByVal dwNewLong As Long) 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 GWL_WNDPROC = (-4) Public Const WM_CONTEXTMENU = &H7B Global lpPrevWndProc As Long Global gHW As Long Public Sub Hook() lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, _ AddressOf WindowProc) End Sub Public Sub Unhook() Dim temp As Long temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc) End Sub Public Function WindowProc(ByVal hWnd As Long, ByVal Msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long If Msg = WM_CONTEXTMENU Then Debug.Print "Фиг вам!" WindowProc = True ' Обрабатываем другие сообщения стандартным образом Else WindowProc = CallWindowProc(lpPrevWndProc, hWnd, Msg, wParam, _ lParam) End If End Function
' Код в модуле формы Private Sub Form_Load() gHW = Text1.hwnd Hook End Sub Private Sub Form_Unload(Cancel As Integer) Unhook End Sub ' Теперь щелкните правой кнопкой на двух текстовых полях