当前位置: 首页 > news >正文

做一个b2b网站网络推广专员所需知识

做一个b2b网站,网络推广专员所需知识,ftp上传网站之后怎么做,移动端网站建设的尺寸在编程当中,或多或少会接触到图像编程,对于图像编程来说窗口闪烁是个常见的问题,当窗口有大量的复杂的图元数据需要重绘,或者拥有自定义控件中的窗口闪烁问题更是显而易见的。出现闪烁的原因有很多种,大部分原因主要是…

在编程当中,或多或少会接触到图像编程,对于图像编程来说窗口闪烁是个常见的问题,当窗口有大量的复杂的图元数据需要重绘,或者拥有自定义控件中的窗口闪烁问题更是显而易见的。出现闪烁的原因有很多种,大部分原因主要是因为触发WM_PAINT消息时窗体进行了重绘操作,此过程先是用窗体的背景色擦除窗口表面,再把窗体的图像绘制上去,但是如果这2个操作不在同一时间段完成的话,就会先看到背景色(大部分为白色)接着才看到图像,这样就会出现我们所说的窗体闪烁现象。那么如何解决这个问题呢,解决方法有很多,其中有个比较好的方法(个人认为)就是采用双缓冲机制来绘图,基本上可以解决大部分的问题。

      双缓冲的原理:尽量快的输出图像,使输出在一个刷新周期内完成,如果输出内容很多比较慢,那么采用内存缓冲的方法,先把要输出的内容在内存准备好,然后一次性输出到窗体上,简单的说来就是在窗口刷新一次的过程中,让所有图元同时显示到窗口中。

     在C#中 .Net Framework为编程人员提供了很好的操作双缓冲的方法,为采用双缓冲机制绘制比较复杂的图像数据带来便捷。下面简单的介绍在C#中实现双缓冲的几种方法。

 一:利用默认的双缓冲

(1)在应用程序中使用双缓冲的最简便的方法是使用 .NET Framework 为窗体和控件提供的默认双缓冲。通过将 DoubleBuffered 属性设置为 true。          

  1. this.DoubleBuffered=true;  

(2)使用 SetStyle 方法可以为 Windows 窗体和所创作的 Windows 控件启用默认双缓冲,在窗体或者控件的构造函数中添加如下代码即可:

  1. SetStyle(ControlStyles.ResizeRedraw,true);  
  2. SetStyle(ControlStyles.OptimizedDoubleBuffer,true);  
  3. SetStyle(ControlStyles.AllPaintingInWmPaint,true);  

          或

  1. this.SetStyle(ControlStyles.ResizeRedraw |  
  2.               ControlStyles.OptimizedDoubleBuffer |  
  3.               ControlStyles.AllPaintingInWmPaint, true);  
  4. this.UpdateStyles();  

 注:

.net1.1 和 .net 2.0 在处理控件双缓冲上是有区别的。
.net 1.1 中,使用:this.SetStyle(ControlStyles.DoubleBuffer, true); 
.net 2.0中,使用:this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

 二:手动管理双缓冲

     在C# 中手动管理缓冲图像有2中方法,一种是利用单独开辟内存实现双缓冲这种传统的方法,还有一种是利用 .Net Framework 中独有的BufferedGraphicsContext类实现。

   方法一: 自己开辟一个缓冲区(如一个不显示的Bitmap对象),在其中绘制完成后,再一次性显示,代码如下:   

  1. //1、在内存中建立一块“虚拟画布”  
  2.   Bitmap bmp = new Bitmap(200,200);  
  3.   
  4. //2、获取这块内存画布的Graphics引用  
  5.   Graphics bufferGraphics = Graphics.FromImage(bmp);  
  6.   
  7. //3、在这块内存画布上绘图  
  8.   bufferGraphics.Clear(this.BackColor);  
  9. bufferGraphics.DrawRectangle(Pens.Black,0,0,bmp.Width -1,bmp.Height -1);  
  10. bufferGraphics.DrawEllipse(Pens.Red,10,10,100,50);  
  11. bufferGraphics.DrawLine(Pens.Green,10,100,100,200);  
  12.   
  13. //4、将内存画布画到窗口中  
  14.   using(Graphics g = e.Graphics)  
  15.   {  
  16.       g.DrawImage(bmp, 10, 10);  
  17.   }  
  18.     
  19. //5. 释放资源  
  20.   bmp.Dispose();  
  21. bufferGraphics.Dispose();     

  方法二:

      对于更高级的双缓存情形,可以使用 .NET Framework 类实现自己的双缓存逻辑。负责单独分配和管理图形缓冲区的类是BufferedGraphicsContext 类。每个应用程序都有自己的默认BufferedGraphicsContext 来管理此应用程序的所有默认双缓冲。提供调用Current 可以检索对此实例的引用。通过调用Allocate 方法可以创建与屏幕上的绘图图面关联的BufferedGraphics 类的实例。此方法创建一个与特定呈现图面(如窗体或控件)关联的BufferedGraphics 实例。创建 BufferedGraphics 实例后,可以将图形绘制到由该实例的Graphics 属性表示的缓冲区。 执行所有图形操作后,可通过调用Render 方法将缓冲区的内容复制到屏幕上。 以下代码把方法一实现的效果用此方法来实现:

  1. BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current;  
  2.   
  3. BufferedGraphics myBuffer = currentContext.Allocate(e.Graphics,e.ClipRectangle);  
  4.   
  5. Graphics g = myBuffer.Graphics;  
  6.   
  7. g.Clear(this.BackColor);  
  8. g.DrawRectangle(Pens.Black, 10, 10, 200, 200);  
  9. g.DrawEllipse(Pens.Red, 10, 10, 100, 50);  
  10. g.DrawLine(Pens.Green, 10, 100, 100, 200);  
  11.   
  12. myBuffer.Render(e.Graphics);  //呈现图像至关联的Graphics  
  13.   
  14. myBuffer.Dispose();  
  15. g.Dispose();  

至此,双缓冲问题解决,两种方式的实现效果都一样,笔者私以为第二种方法占有的内存很少,不会出现内存泄露!

转载于:https://www.cnblogs.com/wanzhongjun/p/6262277.html

http://www.lbrq.cn/news/2644885.html

相关文章:

  • 如何做旅游攻略网站免费建站工具
  • 做网站怎么挣钱windows7系统优化工具
  • 南昌网站建设公务河南品牌网络推广外包
  • 电子商务与网络营销题库seo站长论坛
  • 西安曲江文化园区建设开发有限公司网站11月将现新冠感染高峰
  • 做视频网站用什么源码外贸如何做网站推广
  • 平面设计网站免费大推荐怎么推广网站链接
  • 北京营销型网站建设seo网站推广案例
  • 常州模板网站建设价格seo技术教程
  • 互联网做网站属于什么行业推广软文范例100字
  • 博物馆网站做的最好的seo优化必备技巧
  • 怎样做公司的网站建设靠谱seo外包定制
  • 綦江集团网站建设创建网站花钱吗
  • wordpress 整站 数据qq营销
  • 鞍山做网站比较好的公司百度推广怎么添加关键词
  • 个人ip打造范文seo排名工具有哪些
  • 电大亿唐网不做网站做品牌seo优化托管
  • 我要找个做网站的公司宁波网站推广方案
  • 外围网站做代理广州网站外包
  • 企业网站建设需求书网络媒体发稿
  • 青岛建设网站流程优化四个方法
  • 武汉网站外包公司怎样创建网站
  • 网页制作报价优化网站制作方法大全
  • 重庆做网络优化公司电话如何进行网站性能优化
  • 设计学校网站模板免费下载线上营销推广的公司
  • 各大网站网络推广的收费百度老旧版本大全
  • 创网站需要什么免费网站大全下载
  • 企业商城网站开发建设品牌策划的五个步骤
  • 做网站收款支付宝接口成都推广系统
  • 网页制作实践 做网站色盲测试卡
  • 集成电路学习:什么是RQT图形用户界面工具
  • 【代码随想录day 14】 力扣 104.二叉树的最大深度
  • 跨域解决方案
  • Redis 分布式Session
  • 企业后端系统常用数据源类型有哪些?
  • Python包安全工程实践:构建安全可靠的Python生态系统