我在C ++中使用GDI +获取简单流畅的动画时遇到了麻烦。我目前的方法是使用如here所述的WinAPI计时器。我用SetTimer
初始化定时器,间隔为15ms。当相应的WM_TIMER
事件发生时,我正在递增一个rectengle的左上角坐标,为整个屏幕调用InvalidateRect
并绘制rectengle。结果是按预期运动但有规律的闪烁(见video)。这似乎随着间隔而变化,但它始终存在。
问题是如何修改此方法以实现平滑动画?我发现的大多数类似问题都与C#有关,其中工具集似乎有点不同。
编辑:忘记添加 - 这是一个学校项目,所以不一定要改变技术或语言。答案 0 :(得分:1)
在FALSE
中使用bErase
的{{1}}标记。
InvalidateRect
或处理InvalidateRect( hwnd, NULL, FALSE );
消息
WM_ERASEBKGND
或者将LRESULT CALLBACK YourWindowProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam )
{
switch ( msg )
{
case WM_ERASEBKGND:
// Don't paint background if you are blitting from off screen surface.
return 1;
}
return DefWindowProc( hwnd, msg, wparam, lparam );
}
画笔放在窗口类(用于NULL
)定义中。