时间:2021-05-19
在自己画的窗口中,有时候会有闪烁现象。为什么会有闪烁现象呢?其实是因为程序在画窗口时需要用背景色清空显示区域,然后再画。由于这两者的反差比较大,就会被人眼睛捕捉到,感觉闪烁。
双缓冲就是先在内存中把图画好,然后直接复制到屏幕上去,这样的反差就比较小,也就不觉得闪烁了。
WTL中的CDoubleBufferImpl
WTL中有现成的双缓冲类实现,可以很方便的使用就达到效果。
CDoubleBufferImpl 在AtlFrame.h中。
1.首先继承自CDoubleBufferImpl
复制代码 代码如下:
class TCtrl:
public CWindowImpl< TCtrl>,
public WTL::CDoubleBufferImpl<TCtrl> // 继承双缓冲类
2.由于双缓冲类中已经处理了WM_ERASEBKGND 和WM_PAINT消息,所以需要从你的代码中删除对这些消息的处理。然后加上双缓冲的消息处理即可。
复制代码 代码如下:
BEGIN_MSG_MAP(TCtrl)
// MESSAGE_HANDLER(WM_PAINT, OnPaint)
CHAIN_MSG_MAP( WTL::CDoubleBufferImpl<TCtrl>)
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… )}
OK,编译吧。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
WTL中有两个Mix-in类:CDoubleBufferImpl和CDoubleBufferWindowImpl,用于创建双缓冲绘图窗口,用法非常简单。下面创建
使用WTL的CDoubleBufferImpl类可以方便的实现双缓冲,而不必自己实现繁琐的代码,不仅可以绘制一般窗口,也可以绘制对话框的背景等。首先#inclu
电脑屏幕闪烁如何解决?小编带来了电脑屏幕闪烁黑屏解决方法,怎么无缘无故的电脑屏幕就一闪一闪的呢?有的时候还会黑屏,怎么回事呢?请试一试下文的解决方法吧。
电脑屏幕出现条纹闪烁解决方法大家可以来了解一下,如果你的笔记本电脑或台式电脑出现条纹并闪烁的话,不妨就试一试下文介绍的解决方法吧~ 原因一、受到外部干扰
hp2132墨盒灯闪烁,不能打印是因为需要黑色就绪的状态下才能正常使用,解决方法: 1、现在没有墨盒,打印机的墨盒灯就会闪烁,可以安装墨盒后再试下。 2、如