2006-07-24

VC 大数据量绘图时无闪烁刷屏技术实现

来源: 天极开发 作者:青岛郎锐 评论 0 条
 

int m_BufLen; //数据长度
unsigned char* buffer; //数据缓存
int m_dx; //数据偏移量
int m_DY; //数据显示区的幅度
CPoint* value; //将要显示的数值
int m_DX; //数据显示区的宽度
int m_Y0; //数据显示区参照点位置
CRect rect; //数据显示区矩形

  然后在视类中添加函数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);
 }
}


共3页: 上一页 [1] 2 [3] 下一页

(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:DB2数据库中提高INSERT性能详解(下)  
下一篇:PHP常用的正则表达式
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号