在使用VC进行绘图时,屏幕闪烁问题
2009-12-22 14:30
295 查看
在使用VC进行绘图时,最郁闷的就是屏幕闪烁问题。有时只能使用双缓冲去解决,当然更多的时候是去忍受。有没有什么这种的方法?有,那就是重载 OnEraseBkgnd()函数。该函数控制重绘图的背景刷新,默认将窗口用系统背景颜色填充,即用白色将窗口刷一遍。这就产生的严重的闪烁效果,有时看到屏幕白的一条一闪而过,非常不爽。如果将该函数返回值设为TRUE,即不进行背景重绘,虽然屏幕的刷新仍然会闪烁,但是就不会像原来那么严重了。因为窗口的颜色通常与白色反差加大,所以闪烁比较严重。而不进行背景重绘,由于大部分区域新画的颜色与旧颜色相同,就不会有严重的闪烁效果了。这样做有没有什么不好的后果呢?通常情况是没有的,因为一般都是执行整个窗口的重绘,即使用白色刷了背景,也是没有任何作用的。除非你刷新整个屏幕,但只重绘一小部分,这种情况可能么?有可能,比如你通过点击一个按钮来刷新整个窗口,重新绘制的有效区域要比刷新之前小,这些不重叠的区域在重载 OnEraseBkgnd()函数之前会变作白色,而重载之后会保持原来的样子。
下面说两种重载OnEraseBkgnd()函数的方法:
1)手工重载
在要重载的类(通常为CView的子类)声明部分(.h文件)添加虚函数的声明:
virtual BOOL OnEraseBkgnd(CDC* pDC);
注意添加在//{{AFX_VIRTUAL(CMyView)和//}}AFX_VIRTUAL之间。
在类的定义文件(.cpp)中的MESSAFE_MAP部分,//{{AFX_MSG_MAP(CMyView)和 //}}AFX_MSG_MAP之间添加ON_WM_ERASEBKGND()。
然后在函数体添加:
BOOL CMyView::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
这样就搞定了。
2)使用Classwizard
或者使用Classwizard来进行,省去了写代码。通过菜单View->ClassWizard(或者 ctrl+W)->Class name中选你的view。然后在Class Info选项卡中,将Message Filter设为Child Window。重新切换到Message Map选项卡,在Messages中找到WM_ERASEBKGND,双击就添加成功了。点击右边的Edit Code,将函数体改为return TRUE,搞定。这种方法不需要记忆,简单省事,强烈推荐。
下面说两种重载OnEraseBkgnd()函数的方法:
1)手工重载
在要重载的类(通常为CView的子类)声明部分(.h文件)添加虚函数的声明:
virtual BOOL OnEraseBkgnd(CDC* pDC);
注意添加在//{{AFX_VIRTUAL(CMyView)和//}}AFX_VIRTUAL之间。
在类的定义文件(.cpp)中的MESSAFE_MAP部分,//{{AFX_MSG_MAP(CMyView)和 //}}AFX_MSG_MAP之间添加ON_WM_ERASEBKGND()。
然后在函数体添加:
BOOL CMyView::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
这样就搞定了。
2)使用Classwizard
或者使用Classwizard来进行,省去了写代码。通过菜单View->ClassWizard(或者 ctrl+W)->Class name中选你的view。然后在Class Info选项卡中,将Message Filter设为Child Window。重新切换到Message Map选项卡,在Messages中找到WM_ERASEBKGND,双击就添加成功了。点击右边的Edit Code,将函数体改为return TRUE,搞定。这种方法不需要记忆,简单省事,强烈推荐。
相关文章推荐
- vc中关于屏幕闪烁问题解决的小结
- MFC 双缓冲 绘图时屏幕闪烁问题
- 使用opengl在windows窗体中绘图时闪烁的问题
- Winforms下使用TableLayoutPanel进行布局,并解决闪烁及平均列宽与平均行高问题
- 使用Image类show图,解决loading过重, 屏幕闪烁问题
- (VC)解决绘图时闪烁问题的一点经验[转]
- VC++绘图时,利用双缓冲解决屏幕闪烁 转载
- VC使用双缓冲避免绘图闪烁的正确使用方法【转】
- VC的内存绘图防止屏幕闪烁技术的实现
- 解决Delphi MDI 闪烁问题(使用WM_SETREDRAW锁屏后进行处理)
- 解决RedrawWindow()刷新界面出现闪烁的问题, VC对话框界面使用InvalidateRect刷新局部
- 如何使用 GDI+ 双缓冲 解决绘图闪烁问题
- 用双缓冲进行绘图可解决在VC中绘图时的闪烁现象[ 转]
- C# 绘图中的图片闪烁问题解决方法的使用结果
- vc中关于屏幕闪烁问题解决的小结
- 双缓冲解决VC++绘图时屏幕闪烁
- VC GDI双缓冲机制绘图防屏幕闪烁实现步骤
- VC的内存绘图防止屏幕闪烁技术的实现
- VC使用双缓冲避免绘图闪烁的正确使用方法【转】
- 解决VC绘图时闪烁问题的一点经验