使用 GDI+ 在C++中制作流畅的动画
Smooth animations with GDI+ in C++
我在C++中使用GDI+获得简单的平滑动画时遇到了问题。我目前的方法是使用 WinAPI 计时器,如此处所述。我正在以 15ms 的间隔使用SetTimer
初始化计时器。比,当相应的WM_TIMER
事件发生时,我会递增整流器的左上角坐标,为整个屏幕调用InvalidateRect
并绘制整流器。结果是按预期移动,但有规律的闪烁(见视频(。这似乎随间隔而变化,但它始终存在。
问题是如何修改此方法以实现流畅的动画?我发现的大多数类似问题都与 C# 有关,其中工具集似乎略有不同。
编辑:忘了添加 - 这是一个学校项目,所以改变技术或语言对我来说不是一个真正的选择。
在InvalidateRect
中使用FALSE
标志进行bErase
。
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
画笔放在窗口类(用于RegisterClass
(定义中。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 使用 GLUT 使用键停止动画?
- 使用对象数组对 SFML 进行动画处理
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 如何减慢从 BVH 文件读取的 opengl 动画?
- 如何检测是否在缓冲绘画动画中绘制最后一帧?
- 从精灵表在 sfml 中为精灵制作动画
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 没有专用显卡的 Direct2D 与 GDI+
- GDI 绘制到外部窗口 (C++)
- Qt3D 骨骼动画
- ASCII 旋转光标 (TUI) 动画出现问题
- C++ WinAPI[GDI].自定义 gui 正确重绘
- 带有 std::cout 的多线程控制台文本动画
- 有没有办法像动画一样移动控制台窗口?
- C++ Gdi+将图像转换为灰度
- C++GDI+ 选择调色板
- 如何从内存中分配GDI+ POINT类地址?
- 使用 GDI+ 在C++中制作流畅的动画
- 使用GDI C++制作正方形动画