关于双缓冲的几点疑义
关于双缓冲的几点疑问?
在使用VC的GDI进行绘图时,最郁闷的就是屏幕闪烁问题。闪烁的原理是因为重绘时,系统的背景画刷(一般是白色?)要去擦除背景,这样白色画刷将窗口一刷,势必造成闪烁。
如果不采用双缓冲技术,是否可采用以下两种方法:
1.用OnEraseBkGnd实现,不要调用原来的OnEraseBkGnd函数,将其返回改为return TRUE;
2.用OnPaint实现,但是要求刷新时用Invalidate(FALSE)这样的函数。
这样就避免了重绘时使用系统白色画刷将背景擦除,消除了闪烁产生的原因。
问题一:以上两种方法,有何隐患?
双缓冲的实现方法:在兼容DC上进行绘图,然后一次性将绘制完成的图形bitblt到目标DC。
问题二:从双缓冲的实现方法来看,貌似并没有消除闪烁产生的原因,重绘时,系统仍会用白色画刷刷屏,试问怎么就能够消除双缓冲呢?
------解决方案--------------------
刷新时要求invalidate(false), 问题是你如何保证,很多刷新是系统引发的,无法插手的
双缓冲是没有问题的,整副图贴上去的话
在使用VC的GDI进行绘图时,最郁闷的就是屏幕闪烁问题。闪烁的原理是因为重绘时,系统的背景画刷(一般是白色?)要去擦除背景,这样白色画刷将窗口一刷,势必造成闪烁。
如果不采用双缓冲技术,是否可采用以下两种方法:
1.用OnEraseBkGnd实现,不要调用原来的OnEraseBkGnd函数,将其返回改为return TRUE;
2.用OnPaint实现,但是要求刷新时用Invalidate(FALSE)这样的函数。
这样就避免了重绘时使用系统白色画刷将背景擦除,消除了闪烁产生的原因。
问题一:以上两种方法,有何隐患?
双缓冲的实现方法:在兼容DC上进行绘图,然后一次性将绘制完成的图形bitblt到目标DC。
问题二:从双缓冲的实现方法来看,貌似并没有消除闪烁产生的原因,重绘时,系统仍会用白色画刷刷屏,试问怎么就能够消除双缓冲呢?
------解决方案--------------------
刷新时要求invalidate(false), 问题是你如何保证,很多刷新是系统引发的,无法插手的
双缓冲是没有问题的,整副图贴上去的话