+ case WM_MOUSEMOVE:\r
+ PosX = GET_X_LPARAM (lParam);\r
+ PosY = GET_Y_LPARAM (lParam);\r
+\r
+ if (Private->PointerPreviousX != PosX) {\r
+ Private->PointerState.RelativeMovementX += (PosX - Private->PointerPreviousX);\r
+ Private->PointerPreviousX = PosX;\r
+ Private->PointerStateChanged = TRUE;\r
+ }\r
+\r
+ if (Private->PointerPreviousY != PosY) {\r
+ Private->PointerState.RelativeMovementY += (PosY - Private->PointerPreviousY);\r
+ Private->PointerPreviousY = PosY;\r
+ Private->PointerStateChanged = TRUE;\r
+ }\r
+\r
+ Private->PointerState.RelativeMovementZ = 0;\r
+ return 0;\r
+\r
+ case WM_LBUTTONDOWN:\r
+ Private->PointerState.LeftButton = TRUE;\r
+ Private->PointerStateChanged = TRUE;\r
+ return 0;\r
+\r
+ case WM_LBUTTONUP:\r
+ Private->PointerState.LeftButton = FALSE;\r
+ Private->PointerStateChanged = TRUE;\r
+ return 0;\r
+\r
+ case WM_RBUTTONDOWN:\r
+ Private->PointerState.RightButton = TRUE;\r
+ Private->PointerStateChanged = TRUE;\r
+ return 0;\r
+\r
+ case WM_RBUTTONUP:\r
+ Private->PointerState.RightButton = FALSE;\r
+ Private->PointerStateChanged = TRUE;\r
+ return 0;\r
+\r