使用C ++中的GDI +平滑动画

时间:2018-05-19 18:36:23

标签: c++ animation winapi visual-c++ gdi+

我在C ++中使用GDI +获取简单流畅的动画时遇到了麻烦。我目前的方法是使用如here所述的WinAPI计时器。我用SetTimer初始化定时器,间隔为15ms。当相应的WM_TIMER事件发生时,我正在递增一个rectengle的左上角坐标,为整个屏幕调用InvalidateRect并绘制rectengle。结果是按预期运动但有规律的闪烁(见video)。这似乎随​​着间隔而变化,但它始终存在。

问题是如何修改此方法以实现平滑动画?我发现的大多数类似问题都与C#有关,其中工具集似乎有点不同。

编辑:忘记添加 - 这是一个学校项目,所以不一定要改变技术或语言。

1 个答案:

答案 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)定义中。