if(canvas1==NULL)
{
CRect rect;
this->GetClientRect(&rect);
canvas1=new Bitmap(rect.Width(),rect.Height());
}
Graphics *g_canvas1=Graphics::FromImage(canvas1);
SolidBrush blue(Color(255,0,0,255));
g_canvas1->Clear(Color(255,255,255,255)); //背景色刷新
g_canvas1->FillRectangle(&blue,B1_x-40 ,B1_y-40 ,70,70);
graph.DrawImage(canvas1,0,0); delete g_canvas1;
}
if(moving)
{
if(canvas==NULL)//红色方块
{
CRect rect;
this->GetClientRect(&rect);
canvas=new Bitmap(rect.Width(),rect.Height());
}
Graphics *g_canvas=Graphics::FromImage(canvas);
SolidBrush red(Color(255,255,0,0));
g_canvas->Clear(Color(255,255,255,255)); //背景色刷新
g_canvas->FillRectangle(&red,B_x-20 ,B_y-20 ,40,40);
graph.DrawImage(canvas,0,0);
delete g_canvas;
}
当以上两个同时都进行时,虽说是双缓冲,但在背景色刷新时还是会出现闪烁,不知道该怎么解决
{
CRect rect;
this->GetClientRect(&rect);
canvas1=new Bitmap(rect.Width(),rect.Height());
}
Graphics *g_canvas1=Graphics::FromImage(canvas1);
SolidBrush blue(Color(255,0,0,255));
g_canvas1->Clear(Color(255,255,255,255)); //背景色刷新
g_canvas1->FillRectangle(&blue,B1_x-40 ,B1_y-40 ,70,70);
graph.DrawImage(canvas1,0,0); delete g_canvas1;
}
if(moving)
{
if(canvas==NULL)//红色方块
{
CRect rect;
this->GetClientRect(&rect);
canvas=new Bitmap(rect.Width(),rect.Height());
}
Graphics *g_canvas=Graphics::FromImage(canvas);
SolidBrush red(Color(255,255,0,0));
g_canvas->Clear(Color(255,255,255,255)); //背景色刷新
g_canvas->FillRectangle(&red,B_x-20 ,B_y-20 ,40,40);
graph.DrawImage(canvas,0,0);
delete g_canvas;
}
当以上两个同时都进行时,虽说是双缓冲,但在背景色刷新时还是会出现闪烁,不知道该怎么解决
如果有东西移动时双缓冲并不能解决问题。
问题在于可以不刷的地方一定要在裁剪区中去除。