visual GDI Animation c++不能正常工作
visual GDI Animation C++ not working properly
我试图动画一些正方形,使用这些对象的类。当调用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;
}
i set timer in main function
-
在
WM_TIMER
事件中呼叫InvalideRect
和UpdateWindow
。在WM_TIMER
事件的末尾添加一个break;
。如果没有真正的WM_PAINT
消息,进入WM_PAINT
的处理程序将不起作用。 -
在
WM_PAINT
的handler中,使用BeginPaint
返回的HDC
。当处理WM_PAINT
时,不调用GetDC
编辑- square
是WndProc
的局部变量,每次调用WndProc
时,它都会初始化为(0,0)
。您可以更改为static
。
试试能不能解决这个问题
如果你想在每个WM_TIMER事件中重新绘制"正方形",那么仅仅调用InvalidateRect
是不够的,因为这只会标记一个需要重新绘制的区域。调用UpdateWindow
来强制一个新的WM_PAINT事件
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- sdl软件渲染器不工作,工作在硬件加速的一个
- C++程序已停止工作-求解常微分方程