Exemple #1
0
static GLUSvoid glusInternalMouse(GLFWwindow* window, GLUSint button, GLUSint action, GLUSint mods)
{
	GLUSint usedButton = 0;

	if (button == GLFW_MOUSE_BUTTON_LEFT)
	{
		usedButton = 1;
	}
	else if (button == GLFW_MOUSE_BUTTON_MIDDLE)
	{
		usedButton = 2;
	}
	else if (button == GLFW_MOUSE_BUTTON_RIGHT)
	{
		usedButton = 4;
	}

	if (action == GLFW_PRESS)
	{
		g_buttons |= usedButton;
	}
	else
	{
		g_buttons ^= usedButton;
	}

	if (glusMouse)
	{
		glusMouse(action == GLFW_PRESS, usedButton, g_mouseX, g_mouseY);
	}
}
LRESULT CALLBACK WndProc(	HWND	hWnd,			// Handle For This Window
							UINT	uMsg,			// Message For This Window
							WPARAM	wParam,			// Additional Message Information
							LPARAM	lParam)			// Additional Message Information
{
	switch (uMsg)									// Check For Windows Messages
	{
		case WM_ACTIVATE:							// Watch For Window Activate Message
		{
			if (!HIWORD(wParam))					// Check Minimization State
			{
				g_active = GLUS_TRUE;				// Program Is Active
			}
			else
			{
				g_active = GLUS_FALSE;				// Program Is No Longer Active
			}

			return 0;								// Return To The Message Loop
		}

		case WM_SYSCOMMAND:							// Intercept System Commands
		{
			switch (wParam)							// Check System Calls
			{
				case SC_SCREENSAVE:					// Screensaver Trying To Start?
				case SC_MONITORPOWER:				// Monitor Trying To Enter Powersave?
				return 0;							// Prevent From Happening
			}
			break;									// Exit
		}

		case WM_CLOSE:								// Did We Receive A Close Message?
		{
			PostQuitMessage(0);						// Send A Quit Message
			return 0;								// Jump Back
		}

		case WM_KEYDOWN:							// Is A Key Being Held Down?
		{
			if (wParam == VK_ESCAPE)
			{
				PostQuitMessage(0);					// Send A Quit Message
			}
			else
			{
				if(glusKey && g_initdone)
				{
					glusKey(GLUS_TRUE, wParam);
				}
			}
			return 0;								// Jump Back
		}

		case WM_KEYUP:
		{
			if (wParam == VK_ESCAPE)
			{
				// Do nothing
			}
			else
			{
				if(glusKey && g_initdone)
				{
					glusKey(GLUS_FALSE, wParam);
				}
			}
			return 0;								// Jump Back
		}

		case WM_LBUTTONDOWN:
		case WM_MBUTTONDOWN:
		case WM_RBUTTONDOWN:
		{
			if(glusMouse && g_initdone)
			{
				GLUSuint button = 0;

				if (uMsg == WM_LBUTTONDOWN)
				{
					button = 1;
				}
				else if (uMsg == WM_MBUTTONDOWN)
				{
					button = 2;
				}
				else if (uMsg == WM_RBUTTONDOWN)
				{
					button = 4;
				}

				glusMouse(GLUS_TRUE, button, LOWORD( lParam ), HIWORD( lParam ) );
			}
			return 0;
		}

		case WM_LBUTTONUP:
		case WM_MBUTTONUP:
		case WM_RBUTTONUP:
		{
			if(glusMouse && g_initdone)
			{
				GLUSuint button = 0;

				if (uMsg == WM_LBUTTONUP)
				{
					button = 1;
				}
				else if (uMsg == WM_MBUTTONUP)
				{
					button = 2;
				}
				else if (uMsg == WM_RBUTTONUP)
				{
					button = 4;
				}

				glusMouse(GLUS_FALSE, button, LOWORD( lParam ), HIWORD( lParam ) );
			}
			return 0;
		}

		case WM_MOUSEMOVE:
		{
			if(glusMouseMove && g_initdone)
			{
				GLUSuint buttons = 0;

				if (LOWORD(wParam) & MK_LBUTTON)
				{
					buttons |= 1;
				}
				if (LOWORD(wParam) & MK_MBUTTON)
				{
					buttons |= 2;
				}
				if (LOWORD(wParam) & MK_RBUTTON)
				{
					buttons |= 4;
				}

				glusMouseMove(buttons, LOWORD( lParam ), HIWORD( lParam ) );
			}
			return 0;
		}

		case WM_MOUSEWHEEL:
		{
			if(glusMouseWheel && g_initdone)
			{
				GLUSuint buttons = 0;

				if (LOWORD(wParam) & MK_LBUTTON)
				{
					buttons |= 1;
				}
				if (LOWORD(wParam) & MK_MBUTTON)
				{
					buttons |= 2;
				}
				if (LOWORD(wParam) & MK_RBUTTON)
				{
					buttons |= 4;
				}

				glusMouseWheel(buttons, GET_WHEEL_DELTA_WPARAM(wParam)/WHEEL_DELTA, LOWORD( lParam ), HIWORD( lParam ));
			}
			return 0;
		}

		case WM_SIZE:								// Resize The OpenGL Window
		{
			g_width = LOWORD(lParam);				// LoWord=Width, HiWord=Height
			g_height = HIWORD(lParam);

			if (glusReshape && g_initdone)
			{
				glusReshape(g_width, g_height);
			}
			return 0;								// Jump Back
		}
	}

	// Pass All Unhandled Messages To DefWindowProc
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}