AutoRedraw屬性爲True時VB都做了什麼?

AutoRedraw是VB特有的,大多數程序建立雙緩衝是沒有VB這麼方便的,都需自己定義一個內存DC,這個DC,一般來說,只有程序內部知道,別的程序不太可能取得並改寫它。

AutoRedraw屬性爲True時,就建立了常說的雙緩衝,擁有前臺與後臺兩個hDC,這兩個hDC在處理完WM_PAINT消息或調用Refresh方法後,會保持一致。

雙緩衝只是一種加快重繪前臺DC的方法,用雙緩衝時,DC繪圖先在後臺進行,最後一次性複製進前臺,不用雙緩衝,繪圖直接在前臺進行。不管哪種方法,其目的都是爲了更新前臺DC。所以要明白一點:後臺內存DC是不可見的,最終還是要複製到前臺,用戶纔會看到,要改寫別DC的內容,只需用getdc取得其前臺DC就可改寫了,所以取得別人後臺DC沒有太多意義。

但簡單直接改寫是不可能取得持久效果的,因爲當其再次收到WM_PAINT消息時,又會用直接重繪(無雙緩衝)或將後臺DC複製進前臺(有雙緩衝)的方法,恢復原面目。正確方案:應該是用SubClass方法攔截WM_PAINT消息,或定義一個有效區域,或在其重繪後追繪你的內容。

最後說一點:VB的Refresh方法需處理不少東西,且是全局重繪,速度可想而知,有點慢,用API,直接將後臺hDC的內容繪入前臺,會快10倍以上,因還可以採取局部重繪方式,所以速度快上幾千倍也不爲過!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章