在VC中进行绘图过程处理时,如果图形刷新很快, 经常出现图形闪烁的现象。利用先在内存绘制,然后 拷贝到屏幕的办法可以消除屏幕闪烁,具体的方法是先在内存 中创建一个与设备兼容的内存设备上下文,也就是开辟一快内 存区来作为显示区域,然后在这个内存区进行绘制图形。在绘制完成后利用 BitBlt函数把内存的图形直接拷贝到屏幕上即可。
具体想实现的是: 在Dialog客户区的一个图片控件(IDC_MAP)中绘制几个动态的点,如果不用双缓冲的技术,在屏幕刷新的时候会有闪烁的现象。
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中实现目标点的移动,点击按钮匹配点完成连线, 再次启动定时器,重新绘制位置信息,实现动态实时显示信息。
时间: 2024-10-25 15:11:53