// // 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); }