QQ登录

只需一步,快速开始

上位机MFC实现示波器波形绘图源代码

[ 复制链接 ]

上位机MFC实现示波器波形绘图源代码

上位机MFC实现示波器波形绘图源代码

例程界面如上图,
点击工具栏按钮弹出此界面可以查看波形图运行效果。
下面是关键两函数代码。

  1. void CDrawTest::DrawWave(CDC *pDC)
  2. {
  3.         CRect rect;
  4.        
  5.         CString str;
  6.         int i;
  7.         int m_left,m_top,m_right,m_bottom;
  8.        
  9.     int m_Interval = (m_High - m_Low)/10;
  10.         if (m_Interval < 1)  m_Interval = 1;
  11.        
  12.         // 获取绘制坐标的文本框
  13.         CWnd* pWnd = GetDlgItem(IDC_COORD);
  14.        
  15.         pWnd->GetClientRect(&rect);
  16.         pDC->Rectangle(&rect);
  17.        
  18.        
  19.     m_left = rect.left+10;
  20.         m_top = rect.top+10;
  21.         m_right = rect.right-10;
  22.         m_bottom = rect.bottom-20;
  23.        
  24.         int m_IntervalPan = (m_right - m_left)/11;
  25.         if (m_IntervalPan < 1 ) m_IntervalPan =1;
  26.        
  27.         // 创建画笔对象
  28.         CPen* pPenRed = new CPen;
  29.        
  30.         // 红色画笔
  31.         pPenRed->CreatePen(PS_SOLID,1,RGB(255,0,0));
  32.        
  33.         // 创建画笔对象
  34.         CPen* pPenBlue = new CPen;
  35.        
  36.         // 蓝色画笔
  37.         pPenBlue->CreatePen(PS_SOLID,1,RGB(0,0, 255));
  38.        
  39.         // 创建画笔对象
  40.         CPen* pPenGreen = new CPen;
  41.        
  42.         // 绿色画笔
  43.         pPenGreen->CreatePen(PS_DOT,1,RGB(0,255,0));
  44.        
  45.         // 选中当前红色画笔,并保存以前的画笔
  46.         CGdiObject* pOldPen = pDC->SelectObject(pPenRed);
  47.        
  48.         // 绘制坐标轴
  49.         pDC->MoveTo(m_left,m_top);
  50.        
  51.         // 垂直轴
  52.         pDC->LineTo(m_left,m_bottom);
  53.        
  54.         // 水平轴
  55.         pDC->LineTo(m_right,m_bottom);
  56.        
  57.        
  58.         // 写X轴刻度值
  59.         for(i=0;i<10;i++)
  60.         {
  61.                 //str.Format(_T("%d"),m_Min+i*m_Interval);
  62.                 str.Format(_T("%d"),m_Low+i*m_Interval);
  63.                 pDC->TextOut(m_left+i*m_IntervalPan,m_bottom+3,str);               
  64.         }
  65.         //str.Format(_T("%d"),m_Max);
  66.         str.Format(_T("%d"),m_High);
  67.         pDC->TextOut(m_left+10*m_IntervalPan,m_bottom+3,str);               
  68.        
  69.        
  70.         // 绘制X轴刻度
  71.         for (i = m_left; i < m_right-20; i += 5)
  72.         {
  73.                 if ((i & 1) == 0)
  74.                 {
  75.                         // 10的倍数
  76.                         pDC->MoveTo(i + 10, m_bottom);
  77.                         pDC->LineTo(i + 10, m_bottom+4);
  78.                 }
  79.                 else
  80.                 {
  81.                         // 10的倍数
  82.                         pDC->MoveTo(i + 10, m_bottom);
  83.                         pDC->LineTo(i + 10, m_bottom+2);
  84.                 }
  85.         }
  86.        
  87.         // 绘制Y轴箭头
  88.         pDC->MoveTo(m_right-5,m_bottom-5);
  89.         pDC->LineTo(m_right,m_bottom);
  90.         pDC->LineTo(m_right-5,m_bottom+5);
  91.        
  92.         // 绘制X轴箭头       
  93.         pDC->MoveTo(m_left-5,m_top+5);
  94.         pDC->LineTo(m_left,m_top);
  95.         pDC->LineTo(m_left+5,m_top+5);
  96.        

  97.        
  98.         // 绘制Y轴网格 选择绿色画笔
  99.     pDC->SelectObject(pPenGreen);       
  100.     //
  101.         int iTemp = (m_bottom  - m_top)/5;
  102.     for (i = 1 ;i <= 5 ;i++)
  103.         {
  104.                 pDC->MoveTo(m_left,m_bottom - i*iTemp);
  105.                 pDC->LineTo(m_right,m_bottom - i*iTemp);
  106.         }

  107.     //数组赋值
  108.         if(m_now<1024)
  109.         {
  110.             m_now++;
  111.         }
  112.         else
  113.         {
  114.                 m_now = 0;
  115.         }
  116.         for(i = m_Low;i<m_High;i++)
  117.         {
  118.                 //m_lCount[i]=(rand()%10+rand()%100+rand()%1000)%1024;
  119.         m_lCount[i] = (int)(sin(i-m_now)*204);
  120.         }
  121.         int xTemp;
  122.         int yTemp;
  123.         // 更改成蓝色画笔
  124.         pDC->SelectObject(pPenBlue);
  125.         for (i = m_Low; i <= m_High; i=i+3)
  126.         {               
  127.                 xTemp = m_left+(i-m_Low)*m_IntervalPan/m_Interval;
  128.                 yTemp = m_bottom/2 - (int) (m_lCount[i] * m_bottom / 1024);
  129.                 if (yTemp < m_top) yTemp = m_top;
  130.                 if((xTemp >=m_left)&&(xTemp <=m_right))
  131.                 {
  132.                         pDC->MoveTo(xTemp, m_bottom/2);
  133.                         pDC->LineTo(xTemp, yTemp);
  134.                 }
  135.         }
  136.         // 恢复以前的画笔
  137.         pDC->SelectObject(pOldPen);       
  138.        
  139.         delete pPenRed;
  140.         delete pPenBlue;
  141.         delete pPenGreen;
  142.         return;
  143. }
复制代码

  1. void CDrawTest::OnTimer(UINT nIDEvent)
  2. {
  3.         // TODO: Add your message handler code here and/or call default
  4.         CRect rect;
  5.        
  6.         // 获取绘制坐标的文本框
  7.         CWnd* pWnd = GetDlgItem(IDC_COORD);
  8.        
  9.         pWnd->GetClientRect(&rect);
  10.         // 指针
  11.         pDC = pWnd->GetDC();       
  12.         pWnd->Invalidate();
  13.         pWnd->UpdateWindow();
  14.        
  15.         //pDC->Rectangle(&rect);

  16.        
  17.     //内存绘图
  18.     CBitmap memBitmap;
  19.         CBitmap* pOldBmp = NULL;
  20.         memDC.CreateCompatibleDC(pDC);
  21.         memBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);
  22.         pOldBmp = memDC.SelectObject(&memBitmap);
  23.         memDC.BitBlt(rect.left,rect.top,rect.right,rect.bottom,pDC,0,0,SRCCOPY);
  24.         DrawWave(&memDC);
  25.         pDC->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&memDC,0,0,SRCCOPY);

  26.         memDC.SelectObject(pOldBmp);
  27.         memDC.DeleteDC();
  28.         memBitmap.DeleteObject();

  29.         CDialog::OnTimer(nIDEvent);
  30. }
复制代码
工程源代码下载地址:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:上位机MFC实现示波器波形绘图源代码.rar 
文件大小:32.95 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例

  

经历1年的编程与录制点击进入查看


  

halcon从自学到接项目视频教程,另外再赠送全网最全资源  

  

欢迎围观我录制的一套halcon自学视频教程(进入)


  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索