通过动态曲线的循环绘制,在绘制结束时将实时的曲线图复制到内存位图上,部分代码如下所述:
// 获取视图的设备上下文
CDC* pDC = pDlg->GetDC();
// 创建与当前设备上下文兼容的内存设备上下文
pDlg->m_dcMemory.CreateCompatibleDC(pDC);
// 创建与当前设备上下文兼容的位图
CRect rect;
pDlg->GetDlgItem(IDC_WAVEDRAW)->GetWindowRect(&rect);
pDlg->ScreenToClient(&rect);
pDlg->m_bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());
// 将位图选入内存设备上下文
CBitmap* pOldBitmap = pDlg->m_dcMemory.SelectObject(&(pDlg->m_bitmap));
for (int i =0 ;i < num; i++)
{
dc.SetViewportOrg(610,180);
dc.MoveTo(0,0);
// 创建一个点数组来存储所有点
CPoint* points = new CPoint[200];
for(int j = 0; j < 200; j++)
{
points[j] = CPoint(j, -(pDoc->CAL[j] - 128));
}
// 使用Polyline一次性绘制所有点
dc.Polyline(points, 200);
// 释放内存
delete[] points;
//继续绘制...
// 清理
pDlg->m_dcMemory.SelectObject(pOldBitmap);
pDlg->m_bitmap.DeleteObject();
//将视图区域绘制到位图上
BitBlt(pDlg->m_dcMemory, 610, 105, 600, 600, dc, 0, 0, SRCCOPY);
}
//删除内存设备上下文
DeleteDC(pDlg->m_dcMemory);
需要实现点击暂停按钮时,将保存在内存位图中的曲线图呈现出来,并保证曲线图可以随着绘制的循环而实时更新。该如何去写?