⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quxianview.cpp

📁 基于s3c2440 的TCD132D驱动和数据采集并把采集的数据绘制曲线
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// quxianView.cpp : implementation of the CQuxianView class
//

#include "stdafx.h"
#include "quxian.h"

#include "quxianDoc.h"
#include "quxianView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CString str_hex1=_T("IDB_BITMAP5");



/////////////////////////////////////////////////////////////////////////////
// CQuxianView

IMPLEMENT_DYNCREATE(CQuxianView, CView)

BEGIN_MESSAGE_MAP(CQuxianView, CView)
	//{{AFX_MSG_MAP(CQuxianView)
	ON_COMMAND(IDM_HT, OnHt)
	ON_COMMAND(IDM_CCD, OnCcd)
	ON_WM_CREATE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CQuxianView construction/destruction
  
CQuxianView::CQuxianView()
{
	// TODO: add construction code here

}

CQuxianView::~CQuxianView()
{
}



/////////////////////////////////////////////////////////////////////////////
// CQuxianView drawing


volatile IOPreg *v_pIOPRegs;
volatile ADCreg *v_pADCRegs;

void CQuxianView::OnDraw(CDC* pDC)
{

	//初始化坐标值,一般从数据库取得。这里为了示例方便取得比较简单
if (k)
	{
 CClientDC dc(this);   //   device   context   for   painting   
  CRect   rect;   
  GetClientRect(&rect);   
  //   TODO:   Add   your   message   handler   code   here   
  CBitmap   bmp;     
  bmp.LoadBitmap(IDB_BITMAP5);     
  //得到图片信息   
  BITMAP   bmpInfo;     
  bmp.GetBitmap(&bmpInfo);     
    
  CDC   dcMemory;   
  dcMemory.CreateCompatibleDC(&dc);     
    
  CBitmap   *pOldBmp=dcMemory.SelectObject(&bmp);   
    
  StretchBlt(   
                  dc,//   handle   to   destination   device   context   
                  0,   //   x-coordinate   of   upper-left   corner   of   dest.   rectangle   
                  0,   //   y-coordinate   of   upper-left   corner   of   dest.   rectangle   
                  rect.Width(),       //   width   of   destination   rectangle   
                  rect.Height(),     //   height   of   destination   rectangle   
                  dcMemory.m_hDC,   //   handle   to   source   device   context   
                  0,     //   x-coordinate   of   upper-left   corner   of   source   rectangle   
                  0,     //   y-coordinate   of   upper-left   corner   of   source   rectangle   
                  bmpInfo.bmWidth,         //   width   of   source   rectangle   
                  bmpInfo.bmHeight,       //   height   of   source   rectangle   
                  SRCCOPY               //   raster   operation   code   
                  );         
    
  dcMemory.SelectObject(pOldBmp);  
  
}


  if(bShowLineA)

       {
//AfxMessageBox(_T("stqx"));
   bShowLineA=false;
   const int num=1024;
  int i,s;
  float initX[num];
  float initY[num];
     
    for(s=0;s<num;s++)
	{
      initY[s]=p[s];
      initX[s]=s;
	}

       //分别取得X和Y最大值,最小值

        float maxX=initX[0];

       float minX=initX[0];

       float maxY=initY[0];

       float minY=initY[0];

      for(i=0;i<num;i++)              //计算最大最小值

       {
              if(initY[i]>maxY)

                     maxY=initY[i];

              //if(initY[i]<minY)

                    // minY=initY[i];
       }

 minY=0;///////////当Y值有变化时去掉这个加上上边的
//maxY=1024;
minX=0;
maxX=1024;
 
       //如果原点必须在X轴上,加上下面2行,否则注释掉

     // if(minX>0)

            // minX=0;

 

       //如果原点必须在Y轴上,加上下面2行,否则注释掉

      // if(minY>0)

           //minY=0;

 

 

       //确定图象显示大小

      int width=500;

       int height=400;

 

       //确定坐标图四周预留的空白大小

       const int mytop=10;

    const int mybottom=40;

    const int myleft=80;

    const int myright=50;

 

       //确定X,Y轴每单位显示宽度

    
       float intervalX=(width-myleft-myright)/(maxX-minX);

       float intervalY=(height-mybottom-mytop)/(maxY-minY);

 

       //绘制曲线。由于绘图坐标的Y轴是向下延升,所以这里每个点的Y值是用

       //图象高度减去y值大小。
	  
      


                     

      for(i=0;i<(num-1);i++)

       {

         pDC->MoveTo(int(myleft+(initX[i]-minX)*intervalX), 

                     int(height-(mybottom+(initY[i]-minY)*intervalY)));

              pDC->LineTo(int(myleft+(initX[i+1]-minX)*intervalX), 

                     int(height-(mybottom+(initY[i+1]-minY)*intervalY)));

       }


 

      //绘制X,Y轴

       //X轴从图形区域最左端到最右端

       float bottomY=0;

       float leftX=0;

       //bottomY表示X轴的y值,leftX表示Y轴的x值

       if(minY>0)

              bottomY=minY;

       if(minX>0)

              leftX=minX;

 

       pDC->MoveTo(int(myleft),int(height-(mybottom+(bottomY-minY)*intervalY)));

       pDC->LineTo(int(width-myright),int(height-(mybottom+(bottomY-minY)*intervalY)));

       //Y轴从图形区域最底端到最顶端

       pDC->MoveTo(int(myleft+(leftX-minX)*intervalX),int(height-mybottom));

       pDC->LineTo(int(myleft+(leftX-minX)*intervalX),int(mytop));

 

       //确定显示刻度个数

       const int count=5;

 

       //确定每个显示刻度之间的宽度

       float spaceX=(width-myleft-myright)/count;

       float spaceY=(height-mybottom-mytop)/count;

 

       //绘制刻度和刻度值

       CString str;

       //X轴
        CString txtsx[20];
       for(i=0;i<=count;i++)

       {
              
              //str.Format("%.1f",minX+i*(maxX-minX)/count);

              pDC->MoveTo(int(myleft+spaceX*i),int(height-(mybottom+(bottomY-minY)*intervalY)));

              pDC->LineTo(int(myleft+spaceX*i),int(height-(mybottom+(bottomY-minY)*intervalY+5)));

            
              str.Format(_T(" %.1f"), minX+i*(maxX-minX)/count);

              txtsx[i]=(_T("%s"), (LPCTSTR) str);
             pDC->DrawText(txtsx[i],CRect((myleft+spaceX*i-20),(height-(mybottom+(bottomY-minY)*intervalY-5)),(myleft+spaceX*i+20),(height-(mybottom+(bottomY-minY)*intervalY-20))),DT_CENTER);         // x
    
       }

 

     //Y轴
       CString txtsy[20];
       for(i=0;i<=count;i++)

       {     
              pDC->MoveTo(int(myleft+(leftX-minX)*intervalX),int(height-(mybottom+spaceY*i)));

              pDC->LineTo(int(myleft+(leftX-minX)*intervalX+5),int(height-(mybottom+spaceY*i)));

			  
              str.Format(_T(" %.1f"), minY+i*(maxY-minY)/count);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -