C#自定义控件-消除闪烁
来源:互联网 发布:comm100邮件营销软件 编辑:程序博客网 时间:2024/05/16 00:56
C#自定义控件-消除闪烁
开始学习制作自定义控件的时候,自定义控件在重绘时总是发生闪烁。这是因为直接向屏幕绘图导致的。自己绘制控件的外观首先要重载OnPaint事件处理函数,该函数的一个简单示例如下:
- protected override void OnPaint(PaintEventArgs pe)
- {
- pe.Graphics.DrawImage(...);
- }
protected override void OnPaint(PaintEventArgs pe){ pe.Graphics.DrawImage(...);}
这里是直接向OnPaint的参数pe所带的Graphics绘图表面进行绘制的,而这也正是导致闪烁的原因。消除闪烁有两个方法。
一个打开双缓冲。这个功能是Control类提供的,自定义控件都是直接或间接继承Control类,所以直接使用此功能是很方便的。在自定义控件的构造函数内增加下列代码即可。
- this.SetStyle(ControlStyles.UserPaint, true);
- this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
- this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);this.SetStyle(ControlStyles.DoubleBuffer, true);
这个方法虽然方便,但是不能使我们明白其工作原理。
另一个方法就是自己实现双缓冲。
首先定义一个私有变量Bitmap _backBuffer,此变量初始化成自定义控件的大小,并用此位图生成一个绘图表面g,先讲控件绘制到g上,最后将位图_backBuffer一次绘制到e.Graphics绘图表面,也就是屏幕上。示例代码如下:
- if (_backBuffer == null)
- {
- _backBuffer = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
- }
- Graphics g = Graphics.FromImage(_backBuffer);
- OwnerDraw(g);
- g.Dispose();
- pe.Graphics.DrawImageUnscaled(_backBuffer, 0, 0);
- C#自定义控件-消除闪烁
- C# 自定义控件闪烁 UserControl
- c# 自定义控件 属性菜单 控件移动 闪烁
- C# WinForm 用户自定义控件闪烁的问题
- C#控件闪烁问题
- 消除闪烁!
- symbian自定义闪烁图片控件
- Winform 自定义控件闪烁问题
- 解决自定义控件闪烁的问题
- Android运用自定义控件实现闪烁字
- Android EditText 自定义控件 带消除功能
- 消除屏幕闪烁
- 轻松消除贴图闪烁
- 轻松消除贴图闪烁
- MFC消除视图闪烁
- CListCtrl消除闪烁
- C#控件的闪烁问题解决方法
- C#控件的闪烁问题解决方法总结
- VC图片的半透明处理
- 数据库冷备份迁移重建过程
- nmon数据采集(转)
- C#与.NET程序员面试宝典 购买地址(汇总)
- PHP的ob_start()用法
- C#自定义控件-消除闪烁
- 配置 Elastix 1.6 呼叫中心系统
- gdb调试正在运行的进程
- 飞秋-程序的找工作之苦
- 搭建基于VB.net的WP7开发环境(vs2010)
- 智能指针一
- Mina框架学习笔记(二)
- android adb 查看数据库
- 智能指针二