VC++大数据量绘图时无闪烁刷屏技术实现(2)
然后在视类中添加函数GetScreenRect()用以获取数据显示区的大小及其他参数;添加函数CleanScreen()完成清除数据显示区的功能;添加函数DrawPoint()以便在数据显示区画点:
void CWaveShowerView::GetScreenRect()
{
CWnd* pStatic = GetDlgItem(IDC_SCREEN);
pStatic->GetWindowRect(&rect);
ScreenToClient(&rect);
rect.top+=4;
rect.left+=4;
rect.bottom-=4;
rect.right-=4;
m_Y0=(rect.bottom-rect.top)/2+rect.top;
m_DX=rect.Width();
m_DY=rect.Height()/2;
value=new CPoint[m_DX];
}
void CWaveShowerView::CleanScreen()
{
CDC* pDC=GetDC();
CPen pen1(PS_SOLID,1,RGB(0,0,0));
CPen* oldPen1=pDC->SelectObject(&pen1);
for(int i=rect.top;i<rect.bottom;i++)
{
pDC->MoveTo(rect.left,i);
pDC->LineTo(rect.right,i);
}
pDC->SelectObject(&oldPen1);
CPen pen2(PS_SOLID,1,RGB(0,0,255));
CPen* oldPen2=pDC->SelectObject(&pen2);
pDC->MoveTo(rect.left,m_Y0);
pDC->LineTo(rect.right,m_Y0);
pDC->SelectObject(&oldPen2);
ReleaseDC(pDC);
}
void CWaveShowerView::DrawPoint(CPoint pt, COLORREF color)
{
CDC* pDC=GetDC();
pDC->SetPixel(rect.left+pt.x,m_Y0-pt.y,color);
ReleaseDC(pDC);
}
接下来,在视类的OnInitialUpdate()初始化函数中添加代码以进行数据显示的各项前期准备工作,并在“打开数据文件”菜单的响应函数中添加代码以读取文件的内码。
void CWaveShowerView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
GetScreenRect();
for(int i=0;i<m_DX;i++)
value[i].x=value[i].y=0;
SetTimer(0,10,NULL);
}
void CWaveShowerView::OnOpenData()
{
CString FileName="";
CFile file;
CFileDialog dlg(TRUE,"*","*.*",
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"所有文件(*.*)|*.*||",NULL);
if(dlg.DoModal()==IDOK)
{
KillTimer(1);
FileName=dlg.GetPathName();
file.Open(FileName,CFile::modeReadWrite);
m_BufLen=file.GetLength();
buffer= new unsigned char[m_BufLen+m_DX+10];
file.Read(buffer,m_BufLen);
file.Close();
SetTimer(1,10,NULL);
}
}
- 上一篇:VC中利用原始套接字实现网络监听
- 下一篇:最常见的20种VC++编译错误信息