在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中实现目标点的移动,点击按钮匹配点完成连线, 再次启动定时器,从新绘制位置信息,实现动态实时显示信息。内存