双缓冲区的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避免闪烁的解决方案,爱站技术频道就带大家学习到这里了,涉及的方面是比较广泛的,希望大家在每个阶段都能有所突破。
上一篇:如何查看进程的实际内存情况
下一篇:重启后注册表键值消失的原因