Сообщение WM_MOUSEACTIVATE

Const WM_MOUSEACTIVATE = &H21

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

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

WM_MOUSEACTIVATE возвращает одно из значений, описывающее предпринимаемые действия
MA_ACTIVATEОкно активизируется
MA_ACTIVATEANDEATОкно активизируется и удаляется сообщение мыши
MA_NOACTIVATEОкно не активизируется
MA_NOACTIVATEANDEATОкно не активизируется и удаляется сообщение мыши

Параметры

wParam
Дескриптор окна верхнего уровня для активизируемого окна
lParam
Младшее слово, определяющее значение, возвращаемое DefWindowProc в результате обработки сообщения WM_NCHITTEST.
Старшее слово определяет идентификатор сообщения мыши, когда пользователь нажимает на кнопку мыши

Пример

'Обрабатываем клик мыши на различных элементах управления,
' находящихся на форме
' Это относится только к элементам, имеющим окно
' Поместите код в модуль,
' т.к. используется функция обратного вызова
Public OldWindowProc 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
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_USER = &H400

Private Const WM_MOUSEACTIVATE = &H21

Public Function WindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_NCDESTROY = &H82

    ' If we're being destroyed,
    ' restore the original WindowProc
    If msg = WM_NCDESTROY Then
        SetWindowLong _
            hwnd, GWL_WNDPROC, _
            OldWindowProc
    End If

    ' See if a control was clicked.
    If msg = WM_MOUSEACTIVATE Then Form1.MouseClicked

    WindowProc = CallWindowProc( _
        OldWindowProc, hwnd, msg, wParam, _
        lParam)
End Function

' Поместите код модуль формы ' пользователь где-то щелкнул Public Sub MouseClicked() Dim pt As POINTAPI ' Смотрим, где мышка GetCursorPos pt ' конвертируем в клиентские координаты ScreenToClient hwnd, pt ' Рисуем большой крест на месте мыши Cls Line (pt.X - 50, pt.Y - 50)-(pt.X + 50, pt.Y + 50) Line (pt.X + 50, pt.Y - 50)-(pt.X - 50, pt.Y + 50) End Sub
Private Sub Form_Load() OldWindowProc = SetWindowLong( _ hwnd, GWL_WNDPROC, _ AddressOf WindowProc) AutoRedraw = True ScaleMode = vbPixels End Sub

Категория

Мышь