以下是一段利用计时器写的移动图片的代码,但碰到一个问题,就是虽然图片可以移动,但是不能擦除移动前的图像,也就是说图片在移动的时候,前面的图像都没有擦除,请帮忙修改一下代码,使能擦除前面的图像!谢谢!
case WM_TIMER:
HDC dc,hmemdc;
HBITMAP hbmp,holdbmp;
dc=GetDC(hWnd);
hmemdc=CreateCompatibleDC(dc);
hbmp=LoadBitmap(hInst,plane[0].bmpsrc); //载入图片
holdbmp=(HBITMAP)SelectObject(hmemdc,hbmp);
BitBlt(dc,plane[0].xPos,100,100,100,hmemdc,0,0,SRCCOPY); //plane[0].xPos是图片横坐标
DeleteObject(SelectObject(htempdc,holdbmp));
DeleteObject(hmemdc);
DeleteObject(dc);
plane[0].xPos=plane[0].xPos+1; //横坐标随着计时器每次位置移动1个像素。
break;
case WM_TIMER:
HDC dc,hmemdc;
HBITMAP hbmp,holdbmp;
dc=GetDC(hWnd);
hmemdc=CreateCompatibleDC(dc);
hbmp=LoadBitmap(hInst,plane[0].bmpsrc); //载入图片
holdbmp=(HBITMAP)SelectObject(hmemdc,hbmp);
BitBlt(dc,plane[0].xPos,100,100,100,hmemdc,0,0,SRCCOPY); //plane[0].xPos是图片横坐标
DeleteObject(SelectObject(htempdc,holdbmp));
DeleteObject(hmemdc);
DeleteObject(dc);
plane[0].xPos=plane[0].xPos+1; //横坐标随着计时器每次位置移动1个像素。
break;
解决方案 »
- 基于MFC对话框的EXE工程,单步调试不会死机,但运行时会死机,找不到问题出在哪了?
- vs2010对话框程序,关闭时出错
- VC2003 #import msado15.dll,程序退出时老报错
- 求助!关于加密算法.
- MFC函数!
- 求救!Cannot open include file: 'stdafx.h': No such file or directory错误
- 如何枚举注册表子项?
- 有关注册表修改更新的问题(谢谢,关注的顶一下)
- 大侠们,狂入!!关于数据集
- 动态生成的CEdit,怎么样才能有3d的效果?
- win2000任务栏的问题
- 天啊,这些都是什么阿?编译Release时居然报了这么多错误:(
每次显示图片需要记录图片的显示位置,下一次移动计算一下新旧位置之间的矩形,如果窗口背景是纯色,FillRect画背景色檫除原图象,如果背景有图案,BitBlt那一小块背景。
如果不是平移而是任意移动,为防止闪烁,你应该创建一幅宽高都是该图象两倍的内存图象,每次计算一下移动距离看原图象与新图象是否有重叠部分,没有的话FillRect画背景色或BitBlt背景檫除原图象,如果有,两个图象的包容矩形肯定小于刚才创建的内存图象,在该图象上画背景然后画图片,再显示该内存图象。