在OnPaint()中设置的背景怎样才能不闪烁
程序是在win32下写的
代码如下:
void CWindow::OnPaint ()//画图
{
CRect rect;
CPaintDC dc(this);//建立响应WM_PAINT的DC
CDC *md=new CDC;//新建暂存DC md
CBitmap *bitmap=new CBitmap;//建立一个CBitmap位图对象
GetClientRect(&rect);//取得操作窗口大小
md->CreateCompatibleDC(&dc);//将md转换成与dc兼容的DC
bitmap->m_hObject=(HBITMAP)::LoadImage(NULL,"spaceodyssey.bmp",IMAGE_BITMAP,rect.right,rect.bottom,LR_LOADFROMFILE);
md->SelectObject(bitmap);
dc.BitBlt(0,0,rect.right,rect.bottom,md,0,0,SRCCOPY);
if(md) delete md;
if(bitmap) delete bitmap;
Draw(dc);
}
网上看到可以用双缓冲使背景不闪烁,但我还是不明白怎么弄,请高人赐教~~~
[解决办法]
我想基本的思路大概是:
屏幕内容有两个缓存,一个用于前台显示,另一个用于后台绘制。
所有绘图都绘制在后台的缓存中,绘制过程结束后,交换两个缓存的功能。
将原先后台的用于前台显示,原先前台的变成后台绘制
重复以上过程。
由于后台绘制期间前台图像显示不受影响,而切换的时间相比绘制时间要少的多,所以感觉不到闪烁。