Я пытаюсь оживить некоторые квадраты, используя класс для этих объектов. когда вызывается метод MoveSquare
, квадраты перемещаются только на один шаг, затем они останавливаются
Когда я пытаюсь использовать значение, возвращаемое rand()%50
вместо STEP
, квадраты сдвигаются.
Так может кто-нибудь сказать мне, в чем проблема? Почему они не двигаются каждый раз при получении сообщения WM_TIMER
. Вот мой код:
#include "Square.h"
#define STEP 10
void Square::DrawSquare(HDC hdc,int rx,int ry, int lx, int ly) {
Rectangle(hdc,x+rx,y+ry,x+lx,y+ly);
}
void Square::MoveSquare(HWND hwnd_ ,int mod_x_Size,int mod_y_Size) {
x=x+STEP;
y=y+STEP;
InvalidateRect(hwnd_,NULL,TRUE);
}
Square::Square(void) {
x=0;
y=0;
}
Square::~Square(void) {
}
Функция получения и ответа на системные сообщения
LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) {
PAINTSTRUCT ps;
HDC hdc;
Square square[NUMARUL_DE_FIGURI];
HBRUSH shapeColor;
switch (msg) {
case WM_SIZE :
mod_x_Size = LOWORD (lparam) ;
mod_y_Size = HIWORD (lparam) ;
break ;
case WM_TIMER:
for (int i=0;i<NUMARUL_DE_FIGURI;i++) {
square[i].MoveSquare(hwnd,mod_x_Size,mod_y_Size);
}
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
hdc = GetDC(hwnd);
for (int i=0;i<NUMARUL_DE_FIGURI;i++) {
shapeColor = (HBRUSH)SelectObject(hdc, CreateSolidBrush(RGB(255,255,255)));
square[i].DrawSquare(hdc,(mod_x_Size/2)-((i*60)+60),(mod_y_Size/2)-((i*60)+60),(mod_x_Size/2)-((i*60)+120),(mod_y_Size/2)-((i*60)+120));
}
ReleaseDC(hwnd,hdc);
EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
KillTimer(hwnd,1);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wparam, lparam);
}
return 0;
}
я установил таймер в основной функции