Const WM_MOUSEACTIVATE = &H21
Сообщение WM_MOUSEACTIVATE отправляется неактивному окну, когда пользователь щелкает на нем кнопкой мыши. Окно получает это сообщение через функцию обратного вызова WindowProc
MA_ACTIVATE | Окно активизируется |
MA_ACTIVATEANDEAT | Окно активизируется и удаляется сообщение мыши |
MA_NOACTIVATE | Окно не активизируется |
MA_NOACTIVATEANDEAT | Окно не активизируется и удаляется сообщение мыши |
'Обрабатываем клик мыши на различных элементах управления, ' находящихся на форме ' Это относится только к элементам, имеющим окно ' Поместите код в модуль, ' т.к. используется функция обратного вызова 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