GDI雙緩衝的實現

2021-06-13 05:22:50 字數 832 閱讀 1988

gdi雙緩衝其實就是將我們所需要畫在視窗dc上的物件預先畫在記憶體dc上,再將記憶體dc畫到視窗dc上,這樣就可以減少過多對視窗dc操作而產生閃爍現象。

簡單的實現**如下:

hdc hdc = ::getdc(hwnd);	// hwnd為視窗控制代碼

int nwidth = rc.right-rc.left; // rc為視窗的區域

int nheight = rc.bottom-rc.top;

hdc hmemdc = ::createcompatibledc(hdc); // 建立記憶體dc

hbitmap hbitmap = ::createcompatiblebitmap(hdc, nwidth, nheight); // 建立位圖

hbitmap holdbmp = ::selectobject(hmemdc, hbitmap); // 將位圖選到記憶體dc

// 接下來是對記憶體dc進行一系列的畫圖操作

// 注意:所有的操作對應的是記憶體dc的座標系

::rectangle(hmemdc, 0, 0, 100, 100);

//......

// 最後將記憶體dc 畫到視窗dc上

::bitblt(hdc, rc.left, rc.top, nwidth, nheight, hmemdc, 0, 0, srccopy);

// 釋放

::selectobject(hmemdc, holdbmp);

::deletedc(hdc);

::deleteobject(hbitmap);

::releasedc(hwnd, hdc);

GDI 雙緩衝實現

gdi 使用雙緩衝繪圖 我再來詳細解釋一下剛才實現雙緩衝的具體步驟 1 在記憶體中建立一塊 虛擬畫布 bitmap bmp new bitmap 600,600 2 獲取這塊記憶體畫布的graphics引用 graphics g graphics.fromimage bmp 3 在這塊記憶體畫布上繪...

GDI 中的雙緩衝

1 使用.net框架的預設雙緩衝 1 在應用程式中使用雙緩衝的最簡便的方法是使用 net framework 為窗體和控制項提供的預設雙緩衝。通過將 doublebuffered 屬性設定為 true。this.doublebuffered true 2 使用 setstyle 方法可以為 wind...

MFC雙緩衝技術(Gdi )

1.建立乙個乙個最簡視窗 見前文 2.在stdafx.h中新增對gdi 的支援 include pragma comment lib,gdiplus.lib using namespace gdiplus ulong ptr m tokengdiplus gdiplus gdiplusstartup...