Сообщение WM_CONTEXTMENU

Const WM_CONTEXTMENU = &H7B

Сообщение WM_CONTEXTMENU посылается окну при нажатии пользователем правой кнопкой. Окно получает это сообщение через функцию обратного вызова WindowProc

Минимальная платформа

Windows 95, Windows NT 3.51

Возвращаемое значение

Сообщение не возвращает значений

Параметры

wParam
Дескриптор окна, на котором щелкнули правой кнопкой мыши
lParam
Младшее слово определяет горизонтальную позицию курсора в экранной системе координат, старшее слово - вертикальную позицию в момент клика

Пример

' Блокируем контекстное меню для текстового поля
' Поместите на форме два текстовых поля

' Добавьте код для модуля, т.к. используем
' функции обратного вызова

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 ' Теперь щелкните правой кнопкой на двух текстовых полях

Категория

Меню