程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#的雙緩存技術

C#的雙緩存技術

編輯:關於C語言

protected override void OnPaint(PaintEventArgs e)
  {

   System.Drawing.Bitmap b = new Bitmap(this.Width,this.Height);//雙緩沖技術,先將所有要畫的畫在該圖片中,再調用GS畫出該圖片.
   Graphics g = Graphics.FromImage((System.Drawing.Image)b);
   //

在這裡畫你所需要畫的

//
   e.Graphics.DrawImage((System.Drawing.Image)b,0,0);
   g.Dispose();

base.OnPaint (e);
  
  }

 

其中要用到的一個技術就是雙緩存技術,雙緩沖技術是為了解決界面閃爍而采用的一項技術,就是將要繪制的界面先繪制在內存中一個虛擬的、和正在顯示的界面同樣大小的一個區域上,界面變化時將這個內存中的圖象一次性繪制到屏幕上。Graphics gxOff;if (m_bmpOffscreen == null) //要雙緩沖的位圖。m_bmpOffscreen = new Bitmap(ClIEntSize.gxOff = Graphics.gxOff.//繪制一些位圖。//從內存位圖繪制。}在上面的代碼中,我們通過調用 Graphics 類的靜態 FromImage 方法在與我們的控件大小相同的空位圖中創建了一個 Graphics 對象。

======================================

通常,雙緩存邏輯如下所示:

protected override void OnPaint(PaintEventArgs e ){Graphics gxOff; //屏幕外的圖像   if (m_bmpOffscreen == null) //要雙緩沖的位圖   {      m_bmpOffscreen = new Bitmap(ClientSize.Width, ClientSize.Height);   }            gxOff = Graphics.FromImage(m_bmpOffscreen);   gxOff.Clear(this.BackColor);   //繪制一些位圖   gxOff.DrawImage(bmpParent, 0, 0, bmpRect, GraphicsUnit.Pixel);      //邊界矩形Rectangle rc = this.ClIEntRectangle;   rc.Width--;   rc.Height--;               //繪制邊界   gxOff.DrawRectangle(new Pen(Color.Black), rc);   //從內存位圖繪制   e.Graphics.DrawImage(m_bmpOffscreen, 0, 0);   base.OnPaint( e );}
在上面的代碼中,我們通過調用 Graphics 類的靜態 FromImage 方法在與我們的控件大小相同的空位圖中創建了一個 Graphics 對象。我們在內存中的 Graphics 對象上進行所有的繪圖,完成後,將整個准備好的位圖覆蓋到控件的圖形上即可。

添加這段代碼
public void refresh()
{
SetStyle(ControlStyles.SupportsTransparentBackColor,true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);
Refresh();
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved