2012-03-25 43 views
3

我想改變使用GDI +繪製自己的控件的某些部分的顏色,例如,當某些對象被懸停/點擊時。如何防止GDI +重新繪製塗料上的所有內容?

如何僅重新繪製必要的零件?當我只需要對其中的幾個像素進行更改時,重新繪製數千個像素似乎不太合適。

具體而言,我繪製了從1到128個矩形的任意位置,我將需要在各種事件中重新繪製1到128個矩形的任何位置。我不想重新繪製128個矩形,以便僅更改爲1-127。

我讀過這是一個不好的想法使用繪圖代碼的地方是不是在繪畫事件。但是,依靠繪畫事件可以做到這一點嗎?

+0

簡單的方法是將每個「矩形」用自己的繪畫程序作爲控件。然後有另一個容器類型控件「知道」矩形控制它擁有的方式。 – 2012-03-25 17:23:02

+0

這已經在Windows中通過PaintEventArgs.ClipRectangle屬性進行了大量優化。您在該矩形外繪製的任何東西都可以快速完成,而無需燃燒週期。只需使用Invalidate(Rectangle)來設置它。 – 2012-03-25 17:32:31

+0

無效()與矩形是完美的,謝謝!〜 – mina 2012-03-25 18:29:37

回答

6

您可以使用Control.Invalidate方法之一來指定要重繪的區域。
然後在Paint event hander中,您可以使用e.ClipRectangle屬性檢查無效區域。