tekynet 阅读(947) 评论(4)

和MFC一样,在smartphone上绘制的时候也会遇到背景闪烁的问题

在MFC上解决方法一般是三个步骤:

1.屏蔽系统自己的背景刷新(填充背景色)

BOOL XXXX::OnEraseBkgnd(CDC* pDC)
{
   // Left empty, avoids undesirable flickering
  return true;
}

注意:如果屏蔽了这里,一定要自己处理整个的背景刷新


2.在onpaint ondraw中贴图的时候,利用缓冲,整体绘制

void Onpaint()
{
  CDC memdc;
  //....
}

3.尽量进行局部刷新

InvalidateRect(…);


Smartphone上处理背景闪烁,也是相同的步骤

1,屏蔽系统背景绘制

protected override void OnPaintBackground(PaintEventArgs paintg)
{
 // Left empty, avoids undesirable flickering
}

把上面代码写入自己的FORM中就可以,一样需要自己处理整个的背景刷新


2.在中贴图的时候,利用缓冲,整体绘制

private void Mainlist_Paint(object sender, PaintEventArgs e)
 {
     Graphics gxOff; //缓冲Graphics
     if(bkscreen==null) //BITMAP bkscreen
     bkscreen = new Bitmap(ClientSize.Width, ClientSize.Height);

     gxOff = Graphics.FromImage(bkscreen);
     gxOff.Clear(this.BackColor);
     gxOff.DrawImage(bkImage, 0, 0);
     //最后整体贴入设备上
     e.Graphics.DrawImage(bkscreen, 0, 0);
}

3.尽量进行局部刷新

this.Invalidate(new Rectangle(0, 34, 30, 170));
this.Update();


利用上面的方法就能很好的解决背景闪烁的问题了.


评论列表
紫水晶
re: Smartphone上解决背景闪烁问题
哦,最烦重绘,弄不清楚
zuilang
re: Smartphone上解决背景闪烁问题
你是用evc4.0开发吗?在做些什么呢?
teky
re: Smartphone上解决背景闪烁问题
to zuilang:
没有用EVC,用的是.net2005+CF1
作一些娱乐性软件

ERICSHAN
re: Smartphone上解决背景闪烁问题
在pc上还经常用到memdc,先把要更新的painting画到memdc然后一次性bitblt到device的dc上,是不是也可以在smartphone上试试

发表评论
切换编辑模式