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

📄 myworkview.cpp

📁 VC6开发的用于进行色谱分析的示例
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MyWorkView.cpp : implementation of the CMyWorkView class

#include "stdafx.h"
#include "MyWork.h"
#include "selectDialog.h"
#include "luruDialog.h"
#include "MyWorkDoc.h"
#include "MyWorkView.h"
#include "ADSetup.h"
#include "Set2.h"
#include "DataSaveDialog.h"
#include "FinishAD.h"


#include "Set1.h"
#include "dll2.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyWorkView

IMPLEMENT_DYNCREATE(CMyWorkView, CView)

BEGIN_MESSAGE_MAP(CMyWorkView, CView)
	//{{AFX_MSG_MAP(CMyWorkView)
	ON_COMMAND(IDM_FIND, OnFind)
	ON_COMMAND(IDM_LURU, OnLuru)
	ON_COMMAND(IDB_TIME, OnTime)
	ON_WM_TIMER()
	ON_COMMAND(IDB_SEZI, OnSezi)
	ON_COMMAND(IDB_START, OnStart)
	ON_COMMAND(IDB_PAUSE, OnPause)
	ON_COMMAND(IDB_SAVEDATA, OnSavedata)
	ON_COMMAND(ID_PIC_EMPLIFY, OnPicEmplify)
	ON_COMMAND(ID_PIC_SHRINK, OnPicShrink)
	ON_COMMAND(ID_FOUR, OnFour)
	ON_COMMAND(ID_ONE, OnOne)
	ON_COMMAND(ID_SIXTTEEN, OnSixtteen)
	ON_COMMAND(ID_TWO, OnTwo)
	ON_COMMAND(ID_EIGHT, OnEight)
	ON_COMMAND(ID_Y_TWO, OnYTwo)
	ON_COMMAND(ID_Y_EIGHT, OnYEight)
	ON_COMMAND(ID_Y_FOUR, OnYFour)
	ON_COMMAND(ID_Y_ONE, OnYOne)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyWorkView construction/destruction

CMyWorkView::CMyWorkView()
{
 	// TODO: add construction code here
    doc_m=0;
	y_emply=1;
	ratio=0;
	x=70;

	circle_num=0;
	mask=true;
	advance=1;
	
	local=0;
	
	circle_number=1;  
    m=0;
	mm=0;
	finishing=false;
	
    div_label=false;
//	scale=5;
	
	m_con=1;
	ready=true;
	
	nTime=false;
	stoping=false;
	starting=false;
	label=true;
	n=-1;
	m_Set=NULL;
	m_set3=NULL;
}

CMyWorkView::~CMyWorkView()
{
}

BOOL CMyWorkView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMyWorkView drawing

void CMyWorkView::OnDraw(CDC* pDC)
{
    
	////////////////////////
	CMyWorkDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
   
    
    CRect r;
	GetClientRect(r);
	pDC->FillSolidRect(r,RGB(100,150,200));

	pDC->SetTextColor(RGB(255,0,255));//选择前景色
	CPen hp;
	hp.CreatePen(PS_SOLID,1,RGB(255,255,0));//红色
	pDC->SelectObject(&hp);
	///////////////////////////////////////////////////////////////
	    if (GetDocument()->open_flag)
   {
	for (int minn=0;minn<=GetDocument()->doc_number;minn++)
	{
       			rate[minn]=int(((1.25*2/4095)*ad_buffer2[minn]-1.25)/ratio);
				volt_y[minn]=150+rate[minn];
	            time_x[minn]=60+minn*7;
		}
	
		  pDC->MoveTo(60,150);
    for (int maxx=0;maxx<=GetDocument()->doc_number-2;maxx++)
	{ 
        pDC->LineTo(time_x[maxx],volt_y[maxx]);
	    pDC->MoveTo(time_x[maxx],volt_y[maxx]);
	}
	
   }
	
	// 获取系统时钟
	if (nTime)
	{
	CTime thetime;
	thetime=CTime::GetCurrentTime();
	CString s=thetime.Format("%H:%M:%S %A,%B %d,%Y");
	pDC->TextOut(350,0,s);
	}
	if (starting)
	{
		pDC->TextOut(x,30,"正在采集过程中''''''''");
	    x=x+50;
		RECT re;
	GetClientRect(&re);
	if (x>re.right-re.left)
		x=70;
	}
//	SetTimer(1,1000,NULL);
	//画坐标轴
 
	POINT  point_y[5]={{60,250},{60,200},{60,150},{60,100},{60,50}};
	POINT  zb[5]={{5,240},{5,190},{5,140},{5,90},{5,40}};
	pDC->MoveTo(point_y[0]);
	pDC->LineTo(point_y[4]);
	pDC->MoveTo(point_y[0]);
    pDC->LineTo(799,250);
	pDC->TextOut(700,220,"采样时间轴");
	pDC->TextOut(40,1,"输入电压(V)");
	pDC->TextOut(250,1,"模拟信号");

	
	//显示坐标比例:
	CString zuo_biao;
	switch (advance)
	{
	case 1: zuo_biao="采集参数: 此时每隔1秒绘一个采样点";break;
	case 2: zuo_biao="采集参数: 此时每隔2秒绘一个采样点"; break;
	case 4: zuo_biao="采集参数: 此时每隔4秒绘一个采样点"; break;
	case 8: zuo_biao="采集参数: 此时每隔8秒绘一个采样点"; break;
	case 16:zuo_biao="采集参数: 此时每隔16秒绘一个采样点"; break;
	default:break;
	}
	pDC->TextOut(320,260,zuo_biao);
    
	//画纵坐标点;
	pDC->MoveTo(60,200);
	pDC->LineTo(64,200);
	pDC->MoveTo(60,150);
	pDC->LineTo(64,150);
	pDC->MoveTo(60,100);
	pDC->LineTo(64,100);
	pDC->MoveTo(60,50);
	pDC->LineTo(64,50);


	//画箭头
	pDC->MoveTo(60,50);
	pDC->LineTo(60,30);
	pDC->MoveTo(55,30);
	pDC->LineTo(65,30);
	pDC->LineTo(60,23);
	pDC->MoveTo(55,30);
	pDC->LineTo(60,23);
    
	div_t div_x;
	//画横坐标
	for (int x=0;x<=100;x++)
	{
	    div_x=div(x,5);
        if (div_x.rem==0)
		{
   		pDC->MoveTo(60+x*7,250);
		pDC->LineTo(60+x*7,243);
		}
		else 
		{
		pDC->MoveTo(60+x*7,250);
		pDC->LineTo(60+x*7,247);
		}
	}

    //坐标尺度
	CString   vol_n1[5]={"-5.00","-2.50","0.00","2.50","5.00"};
	CString   vol_n2[5]={"-2.50","-1.25","0.00","1.25","2.50"};
	CString   vol_n4[5]={"-1.25","-0.625","0.00","0.625","1.25"};
	CString   vol_n8[5]={"-0.625","-0.3125","0.00","0.3125","0.625"};
	CString   vol_n16[5]={"-0.3125","-0.1562","0.00","0.1562","0.3125"};
	
	//初始化纵坐标;
		for (int i=0;i<=4;i++)
	  {
	      int x_label,y_label;
          x_label=zb[i].x;
		  y_label=zb[i].y;
		  pDC->TextOut(x_label,y_label,vol_n1[i]);
		  
	  }

	if (m_main_gain=="-5(V)--5(V)")
	{
		for (int i=0;i<=4;i++)
	  {
	      int x_label,y_label;
          x_label=zb[i].x;
		  y_label=zb[i].y;
		  pDC->TextOut(x_label,y_label,vol_n1[i]);
		  
	  }
	}
	
	if (m_main_gain=="-2.5(V)--2.5(V)")
	{
		for (int i=0;i<=4;i++)
	  {
	      int x_label,y_label;
          x_label=zb[i].x;
		  y_label=zb[i].y;
		  pDC->TextOut(x_label,y_label,vol_n2[i]);
	
	  }
	}
	if (m_main_gain=="-1.25(V)--1.25(V)")
	{
		for (int i=0;i<=4;i++)
	  {
	      int x_label,y_label;
          x_label=zb[i].x;
		  y_label=zb[i].y;
		  pDC->TextOut(x_label,y_label,vol_n4[i]);
		 
	  }
	}
	if (m_main_gain=="-0.625(V)--0.625(V)")
	{
		for (int i=0;i<=4;i++)
	  {
	      int x_label,y_label;
          x_label=zb[i].x;
		  y_label=zb[i].y;
		  pDC->TextOut(x_label,y_label,vol_n8[i]);
		 
	  }
	}
	
	if (m_main_gain=="-0.3125(V)--0.3125(V)")
	{
	for (int i=0;i<=4;i++)
	  {
	      int x_label,y_label;
          x_label=zb[i].x;
		  y_label=zb[i].y;
		  pDC->TextOut(x_label,y_label,vol_n16[i]);
		 
	  }
			
	}
	
	//求每单位坐标代表的电压值:
	
//	 double ratio;  /////////////////////////////6.27号改
  
	 switch (ad_gain)
	 {
	 case 0: 
		 {
			 ratio=0.05;
			 scale=5;
			 break;
		 }
	 case 1: 
		 {
			 ratio=0.025;
			 scale=2.5;
			 break;
		 }
	 case 2:
		  {
			 ratio=0.0125; 
		     scale=1.25;
		     break;
		  }
	 case 3:
		 {
			 ratio=0.00625; 
			 scale=0.625;
			 break;
		 }
	 case 4: 
		 {
			 ratio=0.003125;
			 scale=0.3125;
			 break;
		 }
	 case 5:
		 {
			 ratio=0.00165;
			 scale=0.156;
			 break;
		 }
	 ///////////////
	 case 6:
		 {
			 ratio=0.00055;
			 scale=0.055;
		 }
		 ///////////////////
	 default:  break;
	 }

	 // 计算相对坐标值
	
	 
	 //计算描多少个点:
	 int point_div,point_mod;
	 div_t div_result;
	 div_result=div(100,10);
     if (div_result.rem==0)
	 {
		 point_div=div_result.quot;
		 point_mod=0;
	 }
     else{
			 point_div=div_result.quot;
			 point_mod=div_result.rem;
		 }
  
	 ///////////////////////////////////
	
	 ////////求输入电压转化成实际坐标值	
/*	for (int m=0;m<=real_count-1;m++)
		 {
		 rate[m]=int((2.5/4095*ad_buffer[m]-1.25)/ratio);
	     volt_y[m]=150+rate[m];
		 time_x[m]=60+m*10;

	 }*/

	 //画曲线是画图曲线为黄色:
	DeleteObject(hp); 
    CPen hp1;
	hp1.CreatePen(PS_SOLID,1,RGB(255,255,0));//黄色
	pDC->SelectObject(&hp1);
	//pDC->MoveTo(60,150);
 

	
if (starting)
{
	
	W_711B_AD_INT_Status(  &status,  &real_count  );
	if (status!=0)
	//if (real_count<=m_main_ratio*10*60*m_main_time)
	{
	 //////////////////////////   	
	//求平均值:
		
	int sum;
	    sum=0;
		for(int i=0;i<=9;i++)
	{
		  n=n+1;
		  sum=sum+ad_buffer1[n];
		  if (n>=real_count)
	          goto repeat;	
	}
repeat:  avg[m]=int(sum/10);
	
	
	////////////////////////////	
	//换算坐标值:
	 for (int min=0;min<=m;min++)   
		 {
            if (mask)
	    {
			rate[min]=int(((scale*2/4095)*ad_buffer1[min]-scale)/ratio)*y_emply;
			mask=false;
			ad_data[min]=ad_buffer1[min];
			volt_y[min]=150+rate[min];
	        time_x[min]=60+min*7;
		}
		else 
		{
			if (min*advance*m_main_ratio*10<=(real_count-1))
			{
			rate[min]=int(((scale*2/4095)*ad_buffer1[min*advance*m_main_ratio*10]-scale)/ratio)*y_emply; 
			ad_data[min]=ad_buffer1[min*advance*m_main_ratio*10];
			volt_y[min]=150+rate[min];
	        time_x[min]=60+min*7;
			}
			else
			{
			rate[min]=rate[min-1];//int(((scale*2/4095)*ad_buffer1[real_count-1]-scale)/ratio);
	        ad_data[min]=ad_data[min-1];
			volt_y[min]=150+rate[min];
	        time_x[min]=time_x[min-1];
			}
		}
	}
   //把已描的点画出来:	
	  pDC->MoveTo(60,150);
    for (int max=0;max<=m;max++)   // m;
	{ 
        pDC->LineTo(time_x[max],volt_y[max]);
	    pDC->MoveTo(time_x[max],volt_y[max]);
	}
     
	 m=m+1;////////////////////
	 SetTimer(2,1000*advance,NULL);
	}
	else
	{
	    
		W_711B_AD_INT_Stop( &real_count );
		starting=false;
		stoping=false;/////////////////////////////////
		finishing=true;
		KillTimer(2);
    	//初始化菜单:
		CMenu *pMenu1,*SubMenu1;
	    pMenu1=AfxGetMainWnd()->GetMenu();
	    SubMenu1=pMenu1->GetSubMenu(6);
	    SubMenu1->CheckMenuItem(IDB_START,MF_UNCHECKED);
		
		CMenu *pMenu2,*SubMenu2;
	    pMenu2=AfxGetMainWnd()->GetMenu();
	    SubMenu2=pMenu2->GetSubMenu(6);
	    SubMenu2->CheckMenuItem(IDB_PAUSE,MF_UNCHECKED);
		doc_m=m;//////////////////////////////////////////
		m=0;
		CFinishAD dlg;
		dlg.DoModal();
	}
}
  
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CMyWorkView printing

BOOL CMyWorkView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CMyWorkView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CMyWorkView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CMyWorkView diagnostics

#ifdef _DEBUG
void CMyWorkView::AssertValid() const
{
	CView::AssertValid();
}

void CMyWorkView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CMyWorkDoc* CMyWorkView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyWorkDoc)));
	return (CMyWorkDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMyWorkView message handlers

void CMyWorkView::OnFind() 
{
	// TODO: Add your command handler code here
	CselectDialog dlg;
	dlg.DoModal();
}

void CMyWorkView::OnLuru() 
{
	// TODO: Add your command handler code here
	CluruDialog dlg;
	dlg.DoModal();
}

void CMyWorkView::OnTime() 
{

⌨️ 快捷键说明

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