想通过滚动条来控制for循环中计算和绘图的速度(已知计算绘图几乎同步),例如滚动条指向50时速度为50ms,指向100时速度为100ms。
以下为滚动条和for循环的代码:
void CCalcuView::OnCustomdrawSliderTime(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
m_speed=m_SliderTime.GetPos();
UpdateData(FALSE);
*pResult = 0;
}
for (i =0 ;i < num; i++)
{
file.Read(pBuf,dwFileLen);
wfile.Open(wname, CFile::modeWrite |CFile::shareDenyNone| CFile::modeNoTruncate|CFile::typeText);
str.Format("%.2f",mFileHead.fSdep+mFileHead.fStep*i); //先把深度写入
wfile.WriteString(str);
wfile.Close();
pDlg->calculwtcal((char*)(unsigned short *)(pBuf+6)); //+6是因为数据结构前面包括时间(4字节)和序号(2字节)
pDlg->m_nowdepth.SetWindowText(str);
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;
//将视图区域绘制到位图上
BitBlt(pDlg->m_dcMemory, 0, 0, 600, 600, pDlg->pDC, 610, 105, SRCCOPY);
//将位图绘制到视图区域
//BitBlt(pDlg->pDC, 1210, 105, 600, 600, (pDlg->m_dcMemory), 0, 0, SRCCOPY);
pDlg->InvalidateRect(pDlg->rect);
file.Read(&mData,sizeof(mData)+4); //有float型 size+4
nRowOfCurrentNum++ ;
fRowOfCurrentNum = nRowOfCurrentNum;
fRowOfTotalNum = nRowOfTotalNum;
fProPos = (fRowOfCurrentNum/fRowOfTotalNum)*100.00;
nProPos = fProPos;
pDlg->m_progress.SetPos(nProPos); //设置进度条当前进度
}