2016-12-02 83 views

回答

2

有沒有辦法「撤銷」或「擦除」,你做XOR一個BitBlt的或任何其他圖形輸出(除非常特殊情況基於圖形的繪圖,您可以通過在原始頂部執行另一個異或繪製操作來撤消該繪圖)。

你可以做的唯一事情就是在上面畫一些其他東西,這就是你所說的「補丁」。通常情況下,您可以繪製窗口背景色的實心矩形。這正是OnEraseBkgrnd消息處理程序默認執行的操作,它在OnPaint之前運行。具體來說,它使用窗口類的背景畫筆,通常是使用COLOR_3DFACE(用於對話框)或(用於窗口)系統顏色繪製的畫筆。

當然,你總是可以只是而不是首先做BitBlt。 全部繪畫代碼應該總是去掉裏面的OnPaint消息處理函數,所以沒有辦法可以最終得到「陳舊」的圖形。每當窗口需要重新繪製時,就會調用該函數,並且該函數內的代碼將重新繪製窗口。如果你不希望它被繪製位圖,請不要調用BitBlt。

如果你已經使用臨時CDC對象(你通常應做),你可以強制使用做了BitBlt的上你的窗口的頂部通過觸發窗口的重繪被刪除。最簡單的方法是使用窗口的InvalidateRect()成員函數;通過NULL作爲指向要失效的矩形的指針將使窗口的整個客戶區失效,或者可以使您blitting的區域失效。