예제 #1
0
	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;
		}
	}
예제 #3
0
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);
}