MFC利用雙緩衝刷新繪圖

       在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中實現目標點的移動,點擊按鈕匹配點完成連線, 再次啓動定時器,從新繪製位置信息,實現動態實時顯示信息。內存

相關文章
相關標籤/搜索