2011-01-07 64 views
4

我維護一個包含以下一些代碼:RestoreDC之後需要調用TCanvas.Refresh嗎?


    Canvas.Refresh; 
    SavedDC := SaveDC(Canvas.Handle); 
    try 
     // Paint Stuff to the Canvas 
    finally 
     RestoreDC(Canvas.Handle, SavedDC); 
     Canvas.Refresh; 
    end; 

我已經瞭解到,TCanvas.Refresh一點都不像一個組件刷新。它不會導致任何東西繪畫,它只是invalidates the Font, Pen, and Brush of the canvas

我不明白你爲什麼要保存DC之前調用.Refresh,然後恢復它。這似乎有點失敗了SaveDC/RestoreDC調用的目的。

用於這些調用更合理的順序似乎是:


    SaveDC(Canvas.Handle) 
    Canvas.Refresh 
    try 
    // Do my painting 
    finally 
    RestoreDC(Canvas.Handle, SavedDC); 
    end; 

因爲我從來沒有見過或用過的TCanvas.Refresh方法我想檢查並確保我正確地理解這一點。

回答

4

下面是一個說明 - http://edn.embarcadero.com/article/27786

的TCanvas狀態和基本設備上下文之間RestoreDC保證同步之後調用刷新。

不確定在現代Windows版本中需要調用SaveDC之前的刷新,但是其中沒有任何錯誤。

我會建議離開代碼。

+0

從文章看來,我應該在調用刷新之前保存句柄。當然,它也說,先調用刷新只需要Windows 9x ... – 2011-01-07 23:10:08

相關問題