Пожалуйста, позвольте мне исправить ug в программе
Вот в этой программе когда я меняюсь
bar[19].y - 20к
bar[19].y + 20прямоугольник теперь меняется на белый лист, движущийся вверх, а не на прямоугольник, движущийся вверх.В чем ошибка в коде, пожалуйста, дайте мне знать?Спасибо.
Что я уже пробовал:
#ifndef UNICODE #define UNICODE #endif #include<windows.h> #include<string.h> int px = 100, py = 100,i = 0; POINT m; LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void check(); struct box { int x; int y; int width; }bar[20]; int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) { // Register the window class. const wchar_t CLASS_NAME[] = L"Game"; WNDCLASS wc = {}; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.lpszClassName = CLASS_NAME; wc.hCursor = LoadCursor(NULL, IDC_ARROW); RegisterClass(&wc); // Create the window. HWND hwnd = CreateWindowEx( 0, // Optional window styles. CLASS_NAME, // Window class L"Catch Me If You Can", // Window text WS_OVERLAPPEDWINDOW, // Window style // Size and position CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, // Parent window NULL, // Menu hInstance, // Instance handle NULL // Additional application data ); if (hwnd == NULL) { return 0; } ShowWindow(hwnd, nCmdShow); // Run the message loop. MSG msg = {}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } void check() { GetCursorPos(&m); if (m.x <10 && m.y <10) { px = 250; py = 250; } } LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; HBRUSH cr = CreateSolidBrush(RGB(250, 125, 50)); HBRUSH wr = CreateSolidBrush(RGB(255,255,255)); HBRUSH bkfill = CreateSolidBrush(RGB(230, 230, 230)); HANDLE hold; HPEN pen = CreatePen(PS_NULL, 0, 1); switch (uMsg) { //case WM_CREATE: case WM_DESTROY: PostQuitMessage(0); return 0; case WM_PAINT: { //InvalidateRect(hwnd, 0, TRUE); //px = 100, py = 100,i=0; hdc = BeginPaint(hwnd, &ps); SendMessage(hwnd, WM_CREATE, NULL, NULL); FillRect(hdc, &ps.rcPaint, cr); SelectObject(hdc, pen); for (i = 0; i < 20; i++) { bar[i].y = 100 + i * 20; bar[i].width = 2 * (i + 1) * 150 / 20; bar[i].x = 250-bar[i].width/2; //or we could use bar[i].x = 350-(i+1)*150/20; } SelectObject(hdc, wr); Rectangle(hdc, bar[1].x, bar[1].y, bar[1].x + bar[1].width, bar[1].y - 20); while (bar[19].y != 30) { SelectObject(hdc, cr); Rectangle(hdc, bar[19].x, bar[19].y--, bar[19].x + bar[19].width, bar[19].y - 20); SelectObject(hdc, wr); Rectangle(hdc, bar[19].x, bar[19].y, bar[19].x + bar[19].width, bar[19].y - 20); Sleep(4); } /*for (i = 0; i < 20; i++) Rectangle(hdc, bar[i].x, bar[i].y, bar[i].x + bar[i].width, bar[i].y + 20);*/ EndPaint(hwnd, &ps); } } return DefWindowProc(hwnd, uMsg, wParam, lParam); }