internal void PostPoll() { for (int i = _pressedButtons.Count - 1; i >= 0; i--) { var button = _pressedButtons[i]; var state = _buttonStates[button]; var args = new MouseButtonEventArgs(button, state, Position); _buttonStates[button] = state; var delegates = OnMouseButton?.GetInvocationList(); if (delegates == null) { return; } foreach (var d in delegates) { var e = (MouseButtonEvent)d; if (e.Invoke(this, args)) { return; } } } }
public int MouseHook(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0) { // Debug.Print("MouseHook called"); unchecked { int wParami = wParam.ToInt32(); //Marshal the data from the callback. var mouseData = (HookNativeDefinitions.MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(HookNativeDefinitions.MouseHookStruct)); var mouseButton = WM.GetMouseButton(wParam); int wheelDelta = 0; if (mouseButton == MouseButton.None && wParami == WM.MOUSEWHEEL) { wheelDelta = WM.GetWheelDDelta(mouseData.mouseData); } if (wParami == WM.MOUSEMOVE) { if (OnMouseMove != null) { OnMouseMove(mouseData.pt.x, mouseData.pt.y); } else { // mouse move is disabled ignore event } } else if (wParami == WM.MOUSEWHEEL && OnMouseWheel != null) { OnMouseWheel?.Invoke(wheelDelta, mouseData.pt.x, mouseData.pt.y); } else if (OnMouseButton != null) { OnMouseButton?.Invoke(mouseButton, mouseData.pt.x, mouseData.pt.y); } } } return(HookNativeDefinitions.CallNextHookEx(MouseHookHandle, nCode, wParam, lParam)); }
private void OnWindowMouseButton(WindowHandle *window, MouseButton button, InputAction action, KeyModifiers mods) => OnMouseButton?.Invoke(button, action, mods);