2012-03-08 91 views
1

我正在使用自定義控件的Window CE應用程序。如何選擇性重繪形狀保持其他完好

在自定義控件中,我正在繪製三個圓圈(填充一個圓圈),一個箭頭一個文本和一個手動線條。它就像Photoshop中的角度選擇器。

現在當我移動光標完成控制重繪並導致閃爍的影響。

我已經嘗試繪製控制位圖第一,然後在最後使用e.drawimage()方法繪製此位圖,但閃爍問題相同。

現在我只有2個形狀(箭頭+線)需要重繪,其他人靜態行爲

所以我的問題是有沒有辦法選擇性繪製形狀保持其他完好無損。第一次繪製所有形狀,但繪製箭頭和線後保持所有其他形狀在那裏的位置完好無損。

這是我在

onPiant重寫方法正在做的。

using (SolidBrush inLineFill = new SolidBrush(circleColor)) 
{ 
    Point[] polyPoints = ...;        
    e.Graphics.DrawLine(....); 
    e.Graphics.FillPolygon(inLineFill, polyPoints); 
    if (firstTime) 
    { 
    e.Graphics.DrawEllipse(...); 
    e.Graphics.DrawEllipse(...); 
    e.Graphics.DrawEllipse(...); 
    e.Graphics.FillEllipse(...); 
    e.Graphics.DrawString(...); 
    firstTime = false ; 
    } 
} 

我看到的完全控制第一次,但我只看到後,該行的箭頭。

+1

您需要在'OnPaint'中完全重繪,但是隻需通過'Invalidate(rect)'刷新屏幕的一部分來減少重新導入。或者通過在Graphics對象上設置適當的剪輯邊界。 – Marcin 2012-03-08 12:57:37

回答

2

可能有幾件事情可以改善行爲。

  • 覆蓋OnPaintBackground,讓它空
  • 緩存SolidBrush創造一個新的每次OnPaint中被稱爲
  • 畫出所有的都是靜態的,以你緩存會員級的位圖形狀的時間,而不是。在OnPaint中,執行該圖像的DrawImage,然後執行你的箭頭和行(變化的東西)。
  • 做到這一切繪製成位圖(您高速緩存,而不是創建每次),則drawImage該屏幕圖形
  • 如果沒有重疊的東西,你已經有了合理的矩形區域,設置一個剪輯區域可以避免不必要的繪圖
+0

請您解釋讓OnPaintBackground覆蓋空白的邏輯。 – 2012-03-09 05:29:25

+0

如果你不需要背景(例如,你在OnPaint中繪製的東西,這是很常見的),那麼它只是增加繪製一些東西,然後你手動繪製的東西。用空實現覆蓋它通常會自行消除閃爍。 – ctacke 2012-03-09 15:12:29

相關問題