private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0) { switch ((MouseMessage)wParam) { case MouseMessage.WM_LBUTTONDOWN: OnLeftButtonDown?.Invoke(null, new MouseEventsArgs { Button = MouseButtons.Left, State = MouseState.MouseDown }); break; case MouseMessage.WM_LBUTTONUP: OnLeftButtonUp?.Invoke(null, new MouseEventsArgs { Button = MouseButtons.Left, State = MouseState.MouseUp }); break; case MouseMessage.WM_LBUTTONDBLCLK: OnLeftDoubleClick?.Invoke(null, new MouseEventsArgs { Button = MouseButtons.Left, State = MouseState.MouseUp, DoubleClick = true }); break; case MouseMessage.WM_RBUTTONDOWN: OnRightButtonDown?.Invoke(null, new MouseEventsArgs { Button = MouseButtons.Right, State = MouseState.MouseUp }); break; case MouseMessage.WM_RBUTTONUP: OnRightButtonUp?.Invoke(null, new MouseEventsArgs { Button = MouseButtons.Right, State = MouseState.MouseUp }); break; case MouseMessage.WM_MOUSEMOVE: OnMouseMove?.Invoke(null, new MouseEventsArgs { Button = MouseButtons.None, State = MouseState.MouseMove }); break; } } return(NativeMethods.CallNextHookEx(HookId, nCode, wParam, lParam)); }
private static void OnOverrideLeftButtonUp(int x, int y) { _updateLeftUp = true; OnLeftButtonUp?.Invoke(x, y); }
private void HandleMouseEvent(MouseEvent mouseEvent) { int x = mouseEvent.X; int y = mouseEvent.Y; switch (mouseEvent.HardwareEvent) { case EHARDWAREMOUSEEVENT.HARDWAREMOUSEEVENT_LBUTTONDOWN: { _updateLeftDown = true; HitScenes(x, y); OnLeftButtonDown?.Invoke(x, y); break; } case EHARDWAREMOUSEEVENT.HARDWAREMOUSEEVENT_LBUTTONUP: { _updateLeftUp = true; HitScenes(x, y); OnLeftButtonUp?.Invoke(x, y); break; } case EHARDWAREMOUSEEVENT.HARDWAREMOUSEEVENT_RBUTTONDOWN: { _updateRightDown = true; HitScenes(x, y); OnRightButtonDown?.Invoke(x, y); break; } case EHARDWAREMOUSEEVENT.HARDWAREMOUSEEVENT_RBUTTONUP: { _updateRightUp = true; HitScenes(x, y); OnRightButtonUp?.Invoke(x, y); break; } case EHARDWAREMOUSEEVENT.HARDWAREMOUSEEVENT_MOVE: { // OnMove will be called from the Update method. break; } case EHARDWAREMOUSEEVENT.HARDWAREMOUSEEVENT_LBUTTONDOUBLECLICK: { OnLeftButtonDoubleClicked?.Invoke(x, y); break; } case EHARDWAREMOUSEEVENT.HARDWAREMOUSEEVENT_RBUTTONDOUBLECLICK: { OnRightButtonDoubleClicked?.Invoke(x, y); break; } case EHARDWAREMOUSEEVENT.HARDWAREMOUSEEVENT_MBUTTONDOWN: { _updateMiddleDown = true; HitScenes(x, y); OnMiddleButtonDown?.Invoke(x, y); break; } case EHARDWAREMOUSEEVENT.HARDWAREMOUSEEVENT_MBUTTONUP: { _updateMiddleUp = true; HitScenes(x, y); OnMiddleButtonUp?.Invoke(x, y); break; } case EHARDWAREMOUSEEVENT.HARDWAREMOUSEEVENT_MBUTTONDOUBLECLICK: { OnMiddleButtonDoubleClicked?.Invoke(x, y); break; } case EHARDWAREMOUSEEVENT.HARDWAREMOUSEEVENT_WHEEL: { OnMouseWheelChanged?.Invoke(mouseEvent.WheelDelta); break; } default: throw new System.NotImplementedException(); } }