2014-01-17 27 views
0

從我的程序的邏輯我知道我需要重繪一個簡單的WinForms Controltop_left = {x=32,y=32}bottom_right = {x=64,y=64}之間的矩形。我不想重寫 整個客戶區域 ,但只有一部分(性能原因)。 WinApi無法確定哪些部分必須重繪,我必須告訴它。那我該怎麼做?如何在C#中重繪控件的特定矩形?

每次我需要此功能時,重繪的矩形都會有所不同。

心想:

  • 發送WM_PAINT消息(但我無法弄清楚如何傳輸的矩形,因爲wParam和lParam始終爲0時,此消息通常到達)
  • ...

(希望這是不重複的。如果是我會刪除。)

+0

爲什麼你不使用不同的區域控制? – Muctadir

+0

@Muctadir因爲要重繪的區域是動態的。每次都不一樣。 – Bitterblue

回答

3

使用Invalidate接受矩形的方法。

control.Invalidate(new Rectangle(32, 32, 32, 32)); 
control.Update(); //to invalidate control immediately 

它將使將在下一次噴漆操作中重新繪製的特定控制區域無效。

+0

注意:無效確保立即被調用。 – BudBrot

+1

@Pengu true,添加'control.Update()'修復這個 – gzaxx

+1

@Pengu是一個錯字(「不」,雖然意思是「不」)?因爲這個談話困擾了我。 – Bitterblue