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

📄 demodlg.cpp

📁 美国Solartron测量设备的演示程序,带数据库和图形显示功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	{
		n=ReadOne();
		m+=n;
	}
	reading=m;

	realreading=(reading-m_lBase)/16384.0;
	m_strTempValue.Format("%.4f",reading/16384.0);
	m_strRealValue.Format("%.4f",(reading-m_lBase)/16384.0);

	if(realreading>m_fUpLimit)
		m_strResult="High alarm!";
	else
		if(realreading<m_fDownLimit)
		m_strResult="Low alarm!";
	else
		m_strResult="OK!";

	ResultOutput(m_strResult,realreading);
	UpdateData(false);
}

void CDemoDlg::OnSetBase() 
{
	long reading;
	reading=m_OrbitModule.ReadCurrent();
	m_lBase=reading;
	m_strZeroBase.Format("%.4f",reading*10/16384.0);
	UpdateData(false);
}

long CDemoDlg::ReadOne()
{
	long reading;
	
	reading=m_OrbitModule.ReadCurrent();


	return reading;

	//m_strRealValue;
}

void CDemoDlg::OnCollect1000() 
{
	UpdateData(true);
	ClearDatabase();
  OnOneCollect();

	ConnectToAccess();

	for(int i=0;i<1000;i++)
	{
		SaveDataToAccess();
	}

	DisconnectToAccess();

UpdateData(false);

	
}

void CDemoDlg::OnScan() 
{
	/*
	ReadOne();
	UpdateData(false);
	ResultOutput(m_strResult);
	*/
	OnOneCollect();
	SetTimer(1,20,NULL);
}

void CDemoDlg::OnOpenAccess() 
{
//ConnectToAccess();

	CAccessDlg AccessDlg;
	AccessDlg.DoModal();
	
}

void CDemoDlg::ConnectToAccess()
{
	m_pConnection.CreateInstance(__uuidof(Connection));
	try
	{
		m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Solartron.mdb","","",adModeUnknown);
	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}


	m_pRecordset.CreateInstance(__uuidof(Recordset));
	try
	{
		m_pRecordset->Open("SELECT * FROM Orbit",_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}

}

void CDemoDlg::DisconnectToAccess()
{
	if(m_pRecordset->State)
	{
		m_pRecordset->Close();
		m_pRecordset=NULL;
	}

	if(m_pConnection->State)
	{
		m_pConnection->Close();
		m_pConnection=NULL;
	}
}



void CDemoDlg::SaveDataToAccess()
{
	static long times=1;
	try
	{
		realnum=ReadOne();
			m_pRecordset->AddNew();
			m_pRecordset->PutCollect("Sequence",_variant_t(times));
			m_pRecordset->PutCollect("TempValue", _variant_t(m_strTempValue));
			m_pRecordset->PutCollect("BaseValue", _variant_t((m_lBase*10/16384.0)));
			m_pRecordset->PutCollect("RealValue", _variant_t(realnum));
			m_pRecordset->PutCollect("Uplimit", _variant_t(m_fUpLimit));
			m_pRecordset->PutCollect("Lowlimit", _variant_t(m_fDownLimit));
			m_pRecordset->PutCollect("Result", _variant_t(m_strResult));
			m_pRecordset->Update();

			times++;
		
	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}
}

void CDemoDlg::ResultOutput(CString str,double reading)
{
	CDC *dc=GetDC();

	//dc->MoveTo(0,475);

	static int i=1;
	if(i>1000)
		i=1;
	else
	{
	

	CRect rectUplimit,rectOk,rectDownlimit,rectWave,rect;
	GetClientRect(&rect);


	rectUplimit.bottom=40;
	rectUplimit.right=130;
	rectUplimit.left=100;
	rectUplimit.top=30;

	rectOk.bottom=60;
	rectOk.right=130;
	rectOk.left=100;
	rectOk.top=50;

	rectDownlimit.bottom=80;
	rectDownlimit.right=130;
	rectDownlimit.left=100;
	rectDownlimit.top=70;

	COLORREF m_colorRed;
	COLORREF m_colorGreen;
	COLORREF m_colorBlue;
	COLORREF m_colorWhite;
	COLORREF m_colorPoint;

	m_colorRed=RGB(255,0,0);
	m_colorGreen=RGB(0,255,0);
	m_colorBlue=RGB(0,0,255);
	m_colorWhite=RGB(255,255,255);

	dc->FillSolidRect(&rectUplimit,m_colorWhite);
	dc->FillSolidRect(&rectOk,m_colorWhite);
	dc->FillSolidRect(&rectDownlimit,m_colorWhite);

	if(str=="High alarm!")
	{
		dc->FillSolidRect(&rectUplimit,m_colorRed);
		dc->FillSolidRect(&rectDownlimit,m_colorWhite);
		dc->FillSolidRect(&rectOk,m_colorWhite);
		m_colorPoint=m_colorRed;
	}
	else
		if(str=="Low alarm!")
		{
			dc->FillSolidRect(&rectDownlimit,m_colorBlue);
			dc->FillSolidRect(&rectUplimit,m_colorWhite);
			dc->FillSolidRect(&rectOk,m_colorWhite);
			m_colorPoint=m_colorBlue;
		}
	else
	{
		dc->FillSolidRect(&rectOk,m_colorGreen);
		dc->FillSolidRect(&rectDownlimit,m_colorWhite);
		dc->FillSolidRect(&rectUplimit,m_colorWhite);
		m_colorPoint=m_colorGreen;
	}

	rectWave.bottom=rect.bottom;
	rectWave.right=rect.right;
	rectWave.left=0;
	rectWave.top=rect.bottom-410;

	dc->FillSolidRect(&rectWave,m_colorWhite);


	CPoint point;
	point.x=i;
	point.y=rect.bottom-205+long(reading*20);


	dc->SetPixel(point,m_colorPoint);
	dc->LineTo(point);


	i++;

	ReleaseDC(dc);

	}



}

void CDemoDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default

	OnScan();
	
	CDialog::OnTimer(nIDEvent);
}

void CDemoDlg::LoadDataFromAccess()
{
	CAccessDlg AccessDlg;

	_variant_t var;
	CString strSequence,strTempValue,strBaseValue,strRealValue,strUplimit,strLowlimit,strResult;
	strSequence=strTempValue=strBaseValue=strRealValue=strUplimit=strLowlimit=strResult="";

	int i=0;
	try
	{
		if(!m_pRecordset->BOF)
			m_pRecordset->MoveFirst();
		else
		{
			AfxMessageBox("The content is blank");
		}

		while(!m_pRecordset->adoEOF)
		{
			var=m_pRecordset->GetCollect("Sequence");
			if(var.vt==VT_NULL)
				strSequence="";
			else
				strSequence.Format("%d",var.lVal);

			var=m_pRecordset->GetCollect("TempValue");
			if(var.vt==VT_NULL)
				strTempValue="";
			else
				strTempValue.Format("%.4f",var.fltVal);

			var=m_pRecordset->GetCollect("BaseValue");
			if(var.vt==VT_NULL)
				strBaseValue="";
			else
				strBaseValue.Format("%.4f",var.fltVal);

			var=m_pRecordset->GetCollect("RealValue");
			if(var.vt==VT_NULL)
				strRealValue="";
			else
				strRealValue.Format("%.4f",var.fltVal);

			var=m_pRecordset->GetCollect("Uplimit");
			if(var.vt==VT_NULL)
				strUplimit="";
			else
				strUplimit.Format("%.4f",var.fltVal);

			var=m_pRecordset->GetCollect("Lowlimit");
			if(var.vt==VT_NULL)
				strLowlimit="";
			else
				strLowlimit.Format("%.4f",var.fltVal);

			var=m_pRecordset->GetCollect("Result");
			if(var.vt==VT_NULL)
				strResult="";
			else
				strResult.Format("%s",var.pbstrVal);

			AccessDlg.m_Display.InsertItem(i,"");
			AccessDlg.m_Display.SetItemText(i,0,strSequence);
			AccessDlg.m_Display.SetItemText(i,1,strTempValue);
			AccessDlg.m_Display.SetItemText(i,1,strBaseValue);
			AccessDlg.m_Display.SetItemText(i,1,strRealValue);
			AccessDlg.m_Display.SetItemText(i,1,strUplimit);
			AccessDlg.m_Display.SetItemText(i,1,strLowlimit);
			AccessDlg.m_Display.SetItemText(i,1,strResult);

			i++;			

			m_pRecordset->MoveNext();

		}
	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}

	m_pRecordset->Close();
}

void CDemoDlg::ClearDatabase()
{
	m_pConnection.CreateInstance(__uuidof(Connection));
	try
	{
		m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Solartron.mdb","","",adModeUnknown);
	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}


	m_pRecordset.CreateInstance(__uuidof(Recordset));	
	try
	{
		m_pRecordset->Open("DELETE * FROM Orbit",_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
	}
	catch(_com_error *e)
	{
		AfxMessageBox(e->ErrorMessage());
	}

}

void CDemoDlg::OnEmptyAccess() 
{
	ClearDatabase();	
}

void CDemoDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	/*
		if(m_OrbitServer.GetConnected())
	{
		m_OrbitServer.Disconnect();
		m_OrbitServer.ReleaseDispatch();
		
	}
	*/
	
	
}

void CDemoDlg::DrawWave(CDC *pDC)
{

}

⌨️ 快捷键说明

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