1. 程式人生 > >win32下雙緩衝原理及實現

win32下雙緩衝原理及實現

一:雙緩衝原理

  為了解決視窗重新整理頻率過快所帶來的閃爍問題,利用雙緩衝技術進行繪圖。所謂雙緩衝技術,就是將資源載入到記憶體,然後複製記憶體資料到裝置DC(這個比較快),避免了直接在裝置DC上繪圖(這個比較慢)。打個簡單的比方:有個畫家在街邊辦了一個即時畫展,在同一塊畫布上根據觀眾的要求畫不同的影象,每當有一位觀眾制定要看什麼畫時,畫家先把之前畫布上的東西全部擦乾淨,再重新繪畫。顯然有一些經典的畫像是大家都想看的,按照以前的老辦法,畫家每次都要重新畫這幅影象,但這種擦了畫,畫了擦的方式很費時。所以畫家想了一個辦法,把這些經典畫像預先用一塊或幾塊畫布畫下來,等有人需要看時,把這些預備好的畫布貼在現有畫布的前面,這樣就能滿足觀眾的實時性要求。那麼這些事先預備好的畫布就相當於記憶體DC,把資源放在記憶體DC裡,等到要重新整理顯示時,將記憶體DC上的東西“貼”到當前視窗DC上,就可以減少延時帶來的閃爍問題,這就是雙緩衝的原理。

詳細介紹見後面的幾片博文。下面舉兩個例子:

二: 例子

例子一:載入點陣圖

程式碼:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 LRESULT
 CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_COMMAND: wmId    = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) {
case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break