Example #1
0
//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND	- process the application menu
//  WM_PAINT	- Paint the main window
//  WM_DESTROY	- post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message)
	{
	case WM_CREATE:
		hdc = GetDC(hWnd);
		SetMapMode(hdc, MM_LOMETRIC);
		POINT p[1];
		p[0].x = 1000;
		p[0].y = -1000;
		LPtoDP(hdc, p, 1);
		DeleteDC(hdc);
		SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, p[0].x + 10, p[0].y + 52, NULL); //Padding na ramkê
		SetTimer(hWnd, TIMER, 25, (TIMERPROC)NULL);
		break;
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// Parse the menu selections:
		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: Add any drawing code here...
		SetMapMode(hdc, MM_LOMETRIC);					//ustaw gruboϾ na 0,1 mm
		SelectObject(hdc, hPen);						//wybierz utworzone pióro
		snake.Draw(hdc);
		EndPaint(hWnd, &ps);
		break;
	case WM_USER:
		DeleteObject(hPen);								//usuñ pióro
		PostQuitMessage(0);
		break;
	case WM_TIMER:
		snake.Move();									//wykonaj ruch wê¿em
		RedrawWindow(hWnd,  NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_NOCHILDREN);	//i odœwie¿ okno
		break;
	case WM_DESTROY:
		DeleteObject(hPen);								//usuñ pióro
		PostQuitMessage(0);
		break;
	case WM_KEYDOWN:
		switch(wParam)
		{
		case VK_LEFT:
			snake.Turn(LEFT);
			break;
		case VK_RIGHT:
			snake.Turn(RIGHT);
			break;
		case VK_DOWN:
			PostMessage(HWND_BROADCAST, GORIGHT, 0, 0);
			break;
		default:
			break;
		}
		break;
	default:
		break;
	}
	if(message == GOLEFT)
	{
		snake.Add(wParam);
		snake.SetDirection(LEFT);
	}
	return DefWindowProc(hWnd, message, wParam, lParam);
}