在VC中進行繪圖過程處理時,若是圖形刷新很快, 常常出現圖形閃爍的現象。利用先在內存繪製,而後 拷貝到屏幕的辦法能夠消除屏幕閃爍,具體的方法是先在內存 中建立一個與設備兼容的內存設備上下文,也就是開闢一快內 存區來做爲顯示區域,而後在這個內存區進行繪製圖形。在繪製完成後利用 BitBlt函數把內存的圖形直接拷貝到屏幕上便可。
函數
具體想實現的是: 在Dialog客戶區的一個圖片控件(IDC_MAP)中繪製幾個動態的點,若是不用雙緩衝的技術,在屏幕刷新的時候會有閃爍的現象。code
CRect rect; CWnd* pWnd = GetDlgItem(IDC_MAP); pWnd->GetWindowRect(&rect); // 獲取控件屏幕座標 pWnd->ScreenToClient(&rect); //轉換爲對應的控件座標 CDC* pDC = pWnd->GetDC(); CDC* pMem =new CDC; //定義內存繪圖的設備上下文 CBitmap* pBmp = new CBitmap; CBitmap* pOldBmp; //CDC* dc=GetDC(); pMem->CreateCompatibleDC(pDC); pBmp->CreateCompatibleBitmap(pDC,rect.Width(),rect.Height()); pOldBmp = pMem->SelectObject(pBmp); //在pMem中繪圖 ........... //將內存中繪製的位置複製顯示到控件中 pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),pMem,0,0,SRCCOPY); pMem->SelectObject(pOldBmp); pBmp->DeleteObject(); pMem->DeleteDC();
實現的效果以下:圖片
在Ontimer中實現目標點的移動,點擊按鈕匹配點完成連線, 再次啓動定時器,從新繪製位置信息,實現動態實時顯示信息。內存