2010-06-08 66 views
0

我想問一些關於如何在Compact Framework中優化重繪的建議? GetHashCode()沒有幫助,因爲它總是返回不同的哈希碼。NETCF - 優化重新繪製(onPaint)

無論如何,我有一個程序,您可以在運行時拖動和調整對象的大小。這個對象是一個透明的對象,它有一個PNG圖像,它也可以根據對象客戶端大小動態調整大小。儘管我注意到了(例如,我有4個透明對象,並且正在拖動或調整其中一個),但即使3不移動,它們中的4個也會觸發OnPaintBackground。另一個當我只是在一個對象上敲擊時,它觸發onPaintBacground()。無論如何,當這些事件被觸發時我沒有問題。

我喜歡做的是優化,這意味着我只需要在必要時重新繪製對象。

你們能給我們一個建議嗎?

這裏是我的僞C#代碼提前

Bitmap _backBuff; 
onResize() { 
    if(_backBuff != null) _backBuff.Dispose(); 
    _backBuff = new Bitmap(ClientSize.Width, ClientSize.Height); 
    Invalidate(); 
} 

onPaintBackground(e) /*have to use onPaintBackground because MSDN said it's faster*/ { 
    using(Graphics g = Graphics.FromImage(_backBuff)) { 
     g.Clear(Color.Black); 

     // draw background 
     ....some interface calling here 
     ....and paint the background 

     // draw alpha PNG 
     .. get hDc 
     .. paint PNG 
     .. release hDc 
    } 

    e.Graphics.DrawImage(_backBuff,0,0); 
} 

感謝。

+0

OnPaintBackground更快嗎?你能否提供該陳述的參考? 通常,當我在WinCE中繪製透明的東西時,我會重寫paintBackground並將它留下_empty_,然後在Paint中繪製我的東西。 – Quibblesome 2010-06-08 18:29:31

回答

1

想到了一個想法

我必須檢查舊位置之間的新位置或新尺寸差異。如果其中一個是新的,則執行重繪..否則..繪製_backBuff(充當緩存映像)。

我實現了它,它對於重新繪製或繪製緩存看起來不錯。

+0

你們有點骯髒的檢查應該像剛纔那樣完成這項工作。 另一種可能性是執行一個對象內的所有項目的繪製,而不是讓幾個較小的對象全部自行繪製。這將有助於您更好地控制繪畫,但需要花費一些時間進行設置。 – Quibblesome 2010-06-08 18:28:36