MFC中的窗口绘图问题

本文介绍了如何解决MFC应用程序中窗口绘图导致的闪屏问题,通过双缓冲技术和局部重绘提高绘图效率并消除闪烁。首先,详细解释了双缓冲的工作原理和实现步骤,然后讨论了局部重绘的必要性及其在不同情况下的应用策略,以确保窗口在失去焦点后再获取焦点时能够正确更新非重绘区域。
摘要由CSDN通过智能技术生成

MFC中的窗口绘图问题

 

1.闪屏

如果按照常规的绘图过程,即每做完一个绘图操作,就马上进行窗口刷新,当绘图过程比较密集的时候,由于没绘制一次就刷新一次窗口,而刷新窗口是需要一定延时的,这就导致了在上一次的刷新还没有完成的时候,这一次的绘图又到来了,这就是常见的闪屏现象(screen flicker

 

2.双缓冲

         要避免闪屏的问题,只需要对每次绘图都进行窗口刷新,而是对所有的绘图完成之后再进行一次刷新,这既提高了效率,有避免了闪屏的问题。

         绘图的实质是将绘制的图形数据写入到一个内存块,然后计算机将这个内存块送到图像显示设备进行显示。默认的绘图过程也是如此,只不过它是每将一次的绘图数据写入到内存,就直接将这块内存发送到显示设备。而现在我们要做的是,将一个周期的内的绘图数据全部写入到同一个内存块中,这个周期完成之后,再将其送到显示设备。

代码的大致流程如下:

CBitmap memBmp;

CDC memDC;

memDC.CreateCompatibleDC(NULL);

   CDC *pDC=this->GetDC(); 

   CRect rect;

   m_chartBoard.GetWindowRect(rect);

   this->ScreenToClient(rect);

   memBmp.CreateCompatibleBitmap(pDC,rect.Width

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值