2011-01-24 134 views

回答

1

這確實取決於你的意思和地點。幾乎所有的CE顯示驅動程序使用雙緩衝從顯存繪圖顯示以防止撕裂和文物(我從來沒有見過一個沒有)。

如果你問如果一些框架,如可能Compact Framework的,MFC,直接顯示或什麼的,它支持通過API,那麼我們就需要知道你在說什麼框架。

+0

其Compact Framework的,當我在windows mobile的所有我的控件閃變,我想知道向下滾動,有沒有辦法阻止它提前 –

+0

感謝@ Dev.Windows,你在畫自己這些控件? – Quibblesome

+0

你好,我正在繪製控制自己 –

3

如果您繪製的控制自己,那麼你可能要考慮執行自己的雙緩衝。
我沒有跟上大量最新採用WinCE最近並會認爲他們會最終端口便於雙緩衝你的桌面上,但也許他們沒有的。

基本前提是隻畫到圖像,然後做塊的形象到「真正的」圖形一次拍攝對象。

這是(從內存中,因此IDK的,如果語法是完美的這個)「東西」是這樣的:

public class DoubleBufferedControl : Control 
{ 

    protected override OnPaint(object sender, PaintEventArgs e) 
    { 
     using(Bitmap bitmap = new Bitmap(Width, Height)) 
     { 
      using(Graphics graphics = Graphics.FromImage(bitmap)) 
      { 
       DoPaint(sender, new PaintEventArgs(graphics)); 
       e.Graphics.DrawImage(bitmap, 0, 0); 
      } 
     } 
    } 

    protected virtual DoPaint(object sender, PaintEventArgs e) 
    { 
     /* left empty for overrides */ 
    } 

    protected override OnPaintBackground(object sender, PaintEventArgs e) 
    { 
     /* do nothing */ 
    } 
} 

然後讓自己所有的控件從這個繼承並添加你的繪圖代碼爲DoPaint的覆蓋。

您可能希望opitmise上述只創建一次位圖(ctor),處理resize事件,然後在resize上重新創建它,然後添加一些配置代碼,以便您可以在對象死亡時對位圖進行配置。