双缓冲区的WTL避免闪烁的解决方案

来源:爱站网时间:2021-02-08编辑:网友分享
程序员在绘制窗口的时候,通常要先抓住用户的眼睛,而这个难度是比较大的,这个时候要怎么实现呢?下面跟着爱站技术频道小编来了解双缓冲区的WTL避免闪烁的解决方案吧!

程序员在绘制窗口的时候,通常要先抓住用户的眼睛,而这个难度是比较大的,这个时候要怎么实现呢?下面跟着爱站技术频道小编来了解双缓冲区的WTL避免闪烁的解决方案吧!
双缓冲就是先在内存中把图画好,然后直接复制到屏幕上去,这样的反差就比较小,也就不觉得闪烁了。




WTL中的CDoubleBufferImpl
WTL中有现成的双缓冲类实现,可以很方便的使用就达到效果。
CDoubleBufferImpl 在AtlFrame.h中。
1.首先继承自CDoubleBufferImpl

 

class TCtrl:
        public CWindowImpl, 
        public WTL::CDoubleBufferImpl  // 继承双缓冲类


2.由于双缓冲类中已经处理了WM_ERASEBKGND 和WM_PAINT消息,所以需要从你的代码中删除对这些消息的处理。然后加上双缓冲的消息处理即可。

 

 

 


 BEGIN_MSG_MAP(TCtrl)
//        MESSAGE_HANDLER(WM_PAINT,        OnPaint)
        CHAIN_MSG_MAP( WTL::CDoubleBufferImpl)
    END_MSG_MAP()


3.增加一个DoPaint函数,函数声明如下:

 

 

 


void DoPaint(CDCHandle dc);


4.将原来OnPaint函数中的代码移到DoPaint中,注意原来的CPaintDC需要改用参数中的CDCHandler

 

 

 


void TCtrl::DoPaint( CDCHandle dc )
{
    //CPaintDC dc(m_hWnd);     dc.MoveTo( xx… )}

 

双缓冲区的WTL避免闪烁的解决方案,爱站技术频道就带大家学习到这里了,涉及的方面是比较广泛的,希望大家在每个阶段都能有所突破。

 

上一篇:如何查看进程的实际内存情况

下一篇:重启后注册表键值消失的原因

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载