到了mfc里面,由于有了封裝,所有的hdc被隱藏在對象中做為隱藏參數傳遞(就是DC類的this啦~~),所以我們的關鍵話題就轉變為了怎樣得到想要的DC類而已,這個過程其實大同小異的。在消息響應的過程中,WM_PAINT被轉變為OnDraw(),OnPaint()一系列函數來響應,這些函數一般都有個參數CDC *pDC傳入進來,因此在這些函數里面,我們就只需要直接畫圖就可以了,和以前sdk的方式一樣。
但是WM_PAINT消息響應的頻度太高了,比如最小化最大化,移動窗體,覆蓋等等都引起重繪,經常的這樣畫圖,很是消耗性能;在有些場合,比如隨機作圖的場合,每一次就改變,還導致了程序的無法實現。怎么解決后一種問題呢。
ms在msdn的例子里面交給我們document/view的經典解決辦法,將圖形的數據存儲在document類里面,view類只是根據這些數據繪圖。比如你要畫個圓,只是將圓心和半徑存在document里面,view類根據這個里面的數據在屏幕上面重新繪制。那么,我們只需要隨機產生一次數據就可以了。
這樣還是存在性能的問題,于是我們開始考慮另外的解決方法。我們知道,將內存中的圖片原樣輸出到屏幕是很快的,這也是我們在dos時代經常做的事情,能不能在windows也重新利用呢?答案就是內存緩沖繪圖,我們今天的主題。
文章來源于領測軟件測試網 http://www.kjueaiud.com/