LRESULT onMessage(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch (msg) { case WM_CLOSE: PostQuitMessage(0); break; case WM_MOVE: case WM_SIZE: onResize(); break; case WM_QUIT: m_finished = true; break; case WM_INPUT: handleRawInput(lparam); break; } return DefWindowProc(hwnd, msg, wparam, lparam); }
void RawInputSystem::update(float delta) { PROFILE; MSG msg; while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); switch (msg.message) // RAW INPUT { case WM_INPUT: handleRawInput(msg); break; case WM_KEYDOWN: if (!(msg.lParam & 0x40000000)) // check the repeat count bit. keyDown(msg); break; case WM_KEYUP: keyUp(msg); break; } } POINT cursorPos; RECT windowRect; GetCursorPos(&cursorPos); GetWindowRect(windowHandle, &windowRect); int x = (int)cursorPos.x - windowRect.left; int y = (int)cursorPos.y - windowRect.top; if (lastX != x || lastY != y) { inputSystem->axisMove(MOUSE, float(x), float(y)); inputSystem->setCursorPositon(math::Vec2(float(x), float(y))); lastX = x; lastY = y; } }
static LRESULT WINAPI msgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (!g_platform_data.m_handler) return DefWindowProc(hWnd, msg, wParam, lParam); switch (msg) { case WM_LBUTTONUP: g_platform_data.m_handler->onMouseButtonUp(SystemEventHandler::MouseButton::LEFT); break; case WM_LBUTTONDOWN: g_platform_data.m_handler->onMouseButtonDown(SystemEventHandler::MouseButton::LEFT); break; case WM_RBUTTONDOWN: g_platform_data.m_handler->onMouseButtonDown(SystemEventHandler::MouseButton::RIGHT); break; case WM_RBUTTONUP: g_platform_data.m_handler->onMouseButtonUp(SystemEventHandler::MouseButton::RIGHT); break; case WM_MBUTTONUP: g_platform_data.m_handler->onMouseButtonUp(SystemEventHandler::MouseButton::MIDDLE); break; case WM_MBUTTONDOWN: g_platform_data.m_handler->onMouseButtonDown(SystemEventHandler::MouseButton::MIDDLE); break; case WM_MOUSEWHEEL: g_platform_data.m_handler->onMouseWheel(GET_WHEEL_DELTA_WPARAM(wParam)); break; case WM_INPUT: handleRawInput(lParam); break; case WM_MOUSEMOVE: { if (!g_platform_data.m_is_mouse_tracked) trackMouse(); } break; case WM_ERASEBKGND: return 1; case WM_MOVE: case WM_SIZE: { RECT rect; GetClientRect(g_platform_data.m_hwnd, &rect); g_platform_data.m_handler->onWindowTransformed( rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top); } break; case WM_CLOSE: PostQuitMessage(0); break; case WM_MOUSELEAVE: { g_platform_data.m_is_mouse_tracked = false; g_platform_data.m_handler->onMouseLeftWindow(); } break; case WM_KEYUP: case WM_SYSKEYUP: g_platform_data.m_handler->onKeyUp(getKeyFromSystem((int)wParam)); break; case WM_KEYDOWN: case WM_SYSKEYDOWN: g_platform_data.m_handler->onKeyDown(getKeyFromSystem((int)wParam)); break; case WM_CHAR: g_platform_data.m_handler->onChar((int)wParam); break; } return DefWindowProc(hWnd, msg, wParam, lParam); }