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

📄 dlg_draw.cpp

📁 功能非常强大的数据采集系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
 	v_pCurveCtrl->m_fHoriEnd=float(v_pCurveCtrl->m_fHoriBegin+v_iPage);	//初始化显示X坐标:一屏显示
 	v_pCurveCtrl->Invalidate();											//图形显示		
 	//屏幕按钮控制
// 	if(v_iNum==0)														//到达原点?
 //		m_cLeft.EnableWindow(false);									//左移按钮无效
 //	if(v_pCurveCtrl->m_fHoriEnd<v_iXmax_dot)							//小于最大采集点数
 //		m_cRight.EnableWindow(true);									//右移按钮有效	
}

//-------------------------------------------------------------------------------------------------
// 功能:图形绘制->右移一点
// 参数:无
//-------------------------------------------------------------------------------------------------
void DLG_DRAW::OnRight() 
{
	// TODO: Add your control notification handler code here
	int		v_iNum;														//临时变量

	//显示位置控制
	v_iNum=v_pCurveCtrl->m_fHoriBegin+v_iMove_num;						//右移移动点数
	v_pCurveCtrl->m_fHoriBegin=float(v_iNum);							//初始化显示X坐标:原点为v_iNum
	v_pCurveCtrl->m_fHoriEnd=float(v_pCurveCtrl->m_fHoriBegin+v_iPage);	//初始化显示X坐标:一屏显示
	v_pCurveCtrl->Invalidate();											//图形显示		
	//屏幕按钮控制
//	if(v_pCurveCtrl->m_fHoriBegin>0)									//大雨原点?
//		m_cLeft.EnableWindow(true);										//左移按钮有效
//	if(v_iNum+v_iPage>=v_iXmax_dot+2)									//大于最大采集点数
//		m_cRight.EnableWindow(false);									//右移按钮无效
	
}

//-------------------------------------------------------------------------------------------------
// 功能:图形绘制->全屏
// 参数:无
//-------------------------------------------------------------------------------------------------
void DLG_DRAW::OnAll() 
{
	// TODO: Add your control notification handler code here
	//显示位置控制
	v_iPage=v_iXmax_page;												//全屏显示点数
	v_pCurveCtrl->m_fHoriBegin=float(0);								//初始化显示X坐标:原点为0
	v_pCurveCtrl->m_fHoriEnd=float(v_iPage);							//全屏显示
	v_pCurveCtrl->Invalidate();											//图形显示	
	//屏幕按钮控制
	m_cAdd.EnableWindow(v_iXmax_page>10?true:false);					//放大有/无效
	m_cDec.EnableWindow(false);											//缩小无效
}

//-------------------------------------------------------------------------------------------------
// 功能:移动点数数据选择变化处理(移动点数下拉窗处理)
// 参数:无
//-------------------------------------------------------------------------------------------------
void DLG_DRAW::OnSelchangeMoveNum() 
{
	// TODO: Add your control notification handler code here
	int			v_iNum;													//临时变量
	CString		v_sTemp;												//临时变量
	m_cMove_num.GetLBText(m_cMove_num.GetCurSel(),v_sTemp);				//获得窗口选项的内容
	v_iNum=atoi(v_sTemp);												//数字化
	if (v_iNum>0)
		v_iMove_num=v_iNum;												//赋值
}

//-------------------------------------------------------------------------------------------------
// 功能:鼠标滚轮消息响应
// 参数:zDelta=120向前(放大);zDelta=120向后(缩小);
//-------------------------------------------------------------------------------------------------
BOOL DLG_DRAW::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) 
{
	// TODO: Add your message handler code here and/or call default
	if(zDelta>0)
		We_add(pt);														//图形放大
	else
		OnDec();														//图形缩小

	return CDialog::OnMouseWheel(nFlags, zDelta, pt);
}

//-------------------------------------------------------------------------------------------------
// 功能:Y轴比例变化响应
// 参数:无
//-------------------------------------------------------------------------------------------------
void DLG_DRAW::OnYScale() 
{
	// TODO: Add your control notification handler code here
	if(!m_cY_scale.GetCheck())
	{
		OnAll();														//满屏显示
		v_pCurveCtrl->ReCalcAllVert();									//重新计算Y轴数据范围
		OnAll();														//满屏显示
	}
	v_pCurveCtrl->m_bVert=m_cY_scale.GetCheck();						//修改Y轴比例标志
}

//-------------------------------------------------------------------------------------------------
// 功能:曲线放大
// 参数:pt:mouse坐标
//-------------------------------------------------------------------------------------------------
void DLG_DRAW::We_add(CPoint pt) 
{
	// TODO: Add your control notification handler code here
	int		v_iNum;														//临时变量

	//一屏显示点数计算
	if(v_iPage<=10)														//小于一屏最小点数
		return;
	v_iNum=v_iPage/2;													//计算一屏显示点数(放大一倍)
	if(v_iNum<10)														//小于一平最小点数
		v_iNum=10;
	v_iPage=(int(v_iNum/10-0.5)+1)*10;									//一屏显示点数
	//显示位置计算
	v_pCurveCtrl->CalcAllAdd(pt,v_iPage);								//图形显示	
	//屏幕按钮控制
	if(v_pCurveCtrl->m_fHoriBegin>0)									//大于原点?
		m_cDec.EnableWindow(true);										//缩小有效
	if(v_pCurveCtrl->m_fHoriEnd<v_iXmax_dot)							//小于最大采集点数?
		m_cDec.EnableWindow(true);										//缩小有效
	if(v_iPage<=10)														//小于一屏最小点数
		m_cAdd.EnableWindow(false);										//放大无效
}

//-------------------------------------------------------------------------------------------------
// 功能:读取数据库信息
// 参数:v_sName:实验编号
//		 v_sNum:绘图名称
//		 v_iNum:采集点数
//-------------------------------------------------------------------------------------------------
bool DLG_DRAW::We_open(CString	v_sName,CString v_sNum,int v_iNum)
{
 	int			v_iNumber,v_iNumber1;									//临时变量
	CString		v_sTemp;												//临时变量
	float		v_fY;													//座标变量
	_RecordsetPtr v_pRecordset;											//数据库记录指针

	try
	{
		ADOConn v_cAdoConn;												// 数据库实例
		v_cAdoConn.OnInitADOConn(theApp.a_iDatabase_Type,theApp.a_sDatabase_Ip,theApp.a_sDatabase_Name,theApp.a_sDatabase_User,theApp.a_sDatabase_Password);
																		//连接数据库
		if (!v_cAdoConn.m_bFlag)
		{
			v_cAdoConn.ExitConnect();									//断开连接
			return false;
		}
		_bstr_t v_sSql="SELECT * FROM information where znum='"+v_sName+"' order by zauto";
																		//设置查询语句
		v_pRecordset = v_cAdoConn.GetRecordSet(v_sSql);					//执行SELETE语句
		if (!v_cAdoConn.m_bFlag)
			return false;
		v_iNumber1=0;													//复位:一条记录计数,每条50个实验数据
		while (!v_pRecordset->adoEOF)
 		{
			for(v_iNumber=0;v_iNumber<=49;v_iNumber++)
			{
				v_sTemp.Format("%02d",v_iNumber);
				v_sTemp="znr"+v_sTemp;
				if(v_pRecordset->Fields->GetItem((_variant_t)v_sTemp)->ActualSize>0)
																		//读取 采集点数
					v_fY = v_pRecordset->GetCollect((_variant_t)v_sTemp).fltVal;
				else v_fY = 0;			
				v_pCurveCtrl->AddData(v_sNum, v_iNumber+v_iNumber1*50, v_fY);
																		//增加图形数据
				v_iNum--;
				if(v_iNum<0)
					break;
			}
			if(v_iNum<0)
				break;
			v_iNumber1++;												//加一
			v_pRecordset->MoveNext();
		}
		v_cAdoConn.ExitConnect();										//断开连接
	}
	catch(_com_error e)													//捕捉异常
	{
		UpdateData(false);
		MessageBox("  数据库操作失败!  ","信息提示",MB_OK);
		return false;
	}
	UpdateData(false);
	return true;
}

//-------------------------------------------------------------------------------------------------
// 功能:执行数据库命令
//-------------------------------------------------------------------------------------------------
bool DLG_DRAW::We_save(CString v_sSql) 
{
	// TODO: Add your control notification handler code here
	bool v_bReturn=true;
	ADOConn v_cAdoConn;													// 数据库实例
	v_cAdoConn.OnInitADOConn(theApp.a_iDatabase_Type,theApp.a_sDatabase_Ip,theApp.a_sDatabase_Name,theApp.a_sDatabase_User,theApp.a_sDatabase_Password);
																		// 连接数据库
	if (!v_cAdoConn.ExecuteSQL((_bstr_t)v_sSql))						// 执行数据库操作
		v_bReturn=false;
	v_cAdoConn.ExitConnect();											//断开连接
	return v_bReturn;
}


//-------------------------------------------------------------------------------------------------
// 功能:读取采集的数据
//-------------------------------------------------------------------------------------------------
void DLG_DRAW::OnRead() 
{
	// TODO: Add your control notification handler code here
	CString			v_sTemp,v_sUnit;									//临时变量
	CString			v_sFileName;										//文件名称
	CFile			v_cRead_file;										//文件实例
	char			v_bBuffer[1000];									//数据缓冲区
	int				v_iLen;												//读取文件长度
	int				v_iData;											//读取数据计数
	int				v_iSum;												//采集点数
	float*			v_pData;											//浮点数指针
	float			v_fData;											//浮点数

	CFileDialog		dlg(TRUE,NULL,"*.bin",NULL,"*.bin");				//TRUE为OPEN对话框,FALSE为SAVE AS对话框
	if(dlg.DoModal()==IDOK)
	{
		v_sFileName=dlg.GetPathName();									//读取文件名

		TRY
		{
			v_cRead_file.Open(v_sFileName, CFile::modeRead);

			v_iXh++;													//图形序号加一
//			v_sNum=v_pParent->m_cList.GetItemText(v_iNum,1);			//实验编号
//			v_sTemp.Format("%02d",v_iXh);
//			v_sTemp+=":编号("+v_sNum+");名称("+v_pParent->m_cList.GetItemText(v_iNum,2)+")";
//			m_cName.AddString(v_sTemp);									//下拉窗口添加数据

			v_iDs_time=100;												//时间间隔
 			v_sUnit="mA";												//物理量
			//绘制图形
			v_iCurveCount++;											//绘制图形序号
			v_sTemp.Format("%02d_", v_iCurveCount);						//曲线名称
			v_pCurveCtrl->AddCurve(v_sTemp+v_sFileName, v_sColours[v_iXh % v_iColourCount].crColour);
																		//增加一条曲线、名称及其显示色彩	

			//读取文件内的实验数据
			v_iSum=0;													//数据采集点数
			v_cRead_file.Seek(0X0594,CFile::begin);						//从文件头开始往下移动0X0594字节,指向数据区
			while(true)
			{
				v_iLen=v_cRead_file.Read(v_bBuffer,1000);				//读取数据(每次1000字节)
				v_iData=0;												//计数器
				while(true)
				{
					if ((v_iData+1)*4<v_iLen)							//读完?
					{
						v_pData=(float*)(v_bBuffer+v_iData*4);			//获得一个数据
						v_pCurveCtrl->AddData(v_sTemp+v_sFileName, (float)v_iSum, (*v_pData)*1000);
																		//增加图形数据
						v_iData++;										//计数器
						v_iSum++;										//采集点数
					}
					else
						break;
				}
				if(v_iLen<1000)											//全部读完?
					break;
			}
			v_cRead_file.Close();										//关闭文件

			v_iXmax_dot=max(v_iXmax_dot,v_iSum);						//绘图采集点数计算
			m_sUnit=v_sUnit;													//物理量
			m_iInput=v_iDs_time;												//时间间隔
			m_iMax=v_iXmax_dot;													//采集点数
	
			//图形绘制参数设置
			v_iXmax_page=(int(v_iXmax_dot/10)+1)*10;							//全屏显示点数
			v_iPage=v_iXmax_page;												//全屏显示点数
			v_pCurveCtrl->m_fHoriBegin=float(0);								//初始化显示X坐标:原点为0
			v_pCurveCtrl->m_fHoriEnd=float(v_iPage);							//初始化显示X坐标:全屏显示
			v_pCurveCtrl->Invalidate();											//图形显示
			v_pCurveCtrl->SetVertLabel(m_sUnit);								//设置实验物理量
			v_pCurveCtrl->SetHoriLabel(theApp.a_sXunit);						//设置x轴显示内容

		}
		CATCH_ALL(e)
		{
			v_cRead_file.Abort();
			THROW_LAST();
		}
		END_CATCH_ALL	
	}
}

/*

移动文件指针
file.Seek(100,CFile::begin);///从文件头开始往下移动100字节
file.Seek(-50,CFile::end);///从文件末尾往上移动50字节
file.Seek(-30,CFile::current);///从当前位置往上移动30字节
file.SeekToBegin();///移到文件头
file.SeekToEnd();///移到文件尾

读写文件
读文件:
char buffer[1000];
file.Read(buffer,1000);
写文件:
CString string("这个世界只有偏执狂才能成功");
file.Write(string,8);

关闭文件
file.Close(); 

*/

//-------------------------------------------------------------------------------------------------
// 结束
//-------------------------------------------------------------------------------------------------

void DLG_DRAW::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	CDialog::OnLButtonUp(nFlags, point);
}

⌨️ 快捷键说明

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