C++的Win32项目绘图程序绘制的图形变白了
我用C++Win32绘图程序绘制了一个会动的小球,原理是不断改变小球的坐标并刷新。但我绘制的小球的颜色是红色,刚开始的时候小球是红色的没错,但运行一会儿后就自己变成白色了...
我用C++Win32绘图程序绘制了一个会动的小球,原理是不断改变小球的坐标并刷新。但我绘制的小球的颜色是红色,刚开始的时候小球是红色的没错,但运行一会儿后就自己变成白色了,这是怎么回事?我觉得是跟显示内存的释放有关,请有关高手支招,感激不尽!
展开
展开全部
这种2D动画绘图都会使用“双缓冲”的技巧以解决闪烁问题,拿GDI说,就是建立一个和屏幕DC兼容的memDC,然后再建立一个兼容的Bitmap,MemDC选中这个Bitmap:
HDC memDC = CreateCompatibleDC ( hDC );
HBITMAP memBM = CreateCompatibleBitmap ( hDC, nWidth, nHeight );
SelectObject ( memDC, memBM );
然后在每个动画更新 Time Step 中,你绘图(比如这里你画的红色小球以及在绘制球之前用的清屏)用的DC都是memDC,在所有绘图任务结束后,用 BitBlt 或 StretchBlt(StretchBlt 支持缩放)将 memDC 的屏幕内容拷贝到真实的屏幕DC上。
百度 GDI 双缓冲类,有人已经把上面这个机制封装成类了,你直接调用它使用就可以了。
HDC memDC = CreateCompatibleDC ( hDC );
HBITMAP memBM = CreateCompatibleBitmap ( hDC, nWidth, nHeight );
SelectObject ( memDC, memBM );
然后在每个动画更新 Time Step 中,你绘图(比如这里你画的红色小球以及在绘制球之前用的清屏)用的DC都是memDC,在所有绘图任务结束后,用 BitBlt 或 StretchBlt(StretchBlt 支持缩放)将 memDC 的屏幕内容拷贝到真实的屏幕DC上。
百度 GDI 双缓冲类,有人已经把上面这个机制封装成类了,你直接调用它使用就可以了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询