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

📄 fibertestclientview.cpp

📁 用API的串口采集数据,并且在界面上显示数据
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	
	delete pPenRed;
	delete pPenBlue;
	delete pPenGreen;
	delete pPenC;
	
	/*#ifdef INPUT_DATA
	if(!m_bIsSetReadPoint)//读串口
	{
	SetTimer(ID_TIMER_READ_POINT,TIME_DRAW,NULL);
	m_bIsSetReadPoint = true;
	}
	#else
	if(!m_bIsSetDrawPoint)//直接读数据库
	{
	SetTimer(ID_TIMER_DRAW_POINT,TIME_DRAW,NULL);
	m_bIsSetDrawPoint = true;
	}
#endif*/
	return;
}


void CFiberTestClientView::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	
	// Do not call CFormView::OnPaint() for painting messages
	CRect rect;
	CWnd* pWnd = GetDlgItem(IDC_COORD);
	
	pWnd->GetClientRect(&rect);
	// 指针
	pDC = pWnd->GetDC();	
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	//pDC->Rectangle(&rect);
	
	
    //内存绘图
    CBitmap memBitmap;
	CBitmap* pOldBmp = NULL;
	memDC.CreateCompatibleDC(pDC);
	memBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);
	pOldBmp = memDC.SelectObject(&memBitmap);
	memDC.BitBlt(rect.left,rect.top,rect.right,rect.bottom,pDC,0,0,SRCCOPY);
	
	DrawWave(&memDC);
	
	pDC->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&memDC,0,0,SRCCOPY);
	
	memDC.SelectObject(pOldBmp);
	memDC.DeleteDC();
	memBitmap.DeleteObject();
	m_datatime=GetTime();
	UpdateData(FALSE);
	
}

void CFiberTestClientView::OnChangeYmin() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CFormView::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	if(m_bIsFinishDraw || NULL == m_uPointA)
	{
		UpdateData();
		OnPaint() ;
	}
	else
	{
		UpdateData(FALSE);
		AfxMessageBox("测试过程中不接收设定!");
	}
}

void CFiberTestClientView::OnChangeYmax() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CFormView::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	if(m_bIsFinishDraw || NULL == m_uPointA)
	{
		UpdateData();
		OnPaint() ;
	}
	else
	{
		UpdateData(FALSE);
		AfxMessageBox("测试过程中不接收设定!");
	}
}

void CFiberTestClientView::OnChangeTestTime() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CFormView::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	
	if(m_bIsFinishDraw || NULL == m_uPointA)
	{
		UpdateData();
		OnPaint() ;
	}
	else
	{
		UpdateData(FALSE);
		AfxMessageBox("测试过程中不接收设定!");
	}
}

CString CFiberTestClientView::GetTime()
{
	CString strTime,str,strDate;
	int t;
	CTime time=CTime::GetCurrentTime();
	t=time.GetHour();
	str.Format("%d",t);
	strTime=str;
	t=time.GetMinute();
	str.Format("%d",t);
	strTime=strTime+":"+str;
	t=time.GetSecond();
	str.Format("%d",t);
	strTime=strTime+":"+str;
	t=time.GetYear();
	str.Format("%d",t);
	strDate=str;
	t=time.GetMonth();
	str.Format("%d",t);
	strDate=strDate+"年"+str;
	t=time.GetDay();
	str.Format("%d",t);
	strDate=strDate+"月"+str+"日";
	return(strDate+"  "+strTime);
}



void CFiberTestClientView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nIDEvent)
	{
	case ID_TIMER_DRAW_POINT:
		DrawPoint();
		break;
	case ID_TIMER_READ_POINT:
		ReadPoint();
		break;
	default:
		break;
	}
	CFormView::OnTimer(nIDEvent);
}


void CFiberTestClientView::DrawPoint()//画数据曲线
{
	//OnPaint();
	static int iTimes=0;
	
	if(m_bIsReTest)
	{
		iTimes = 0;
		m_bIsReTest =false;
		
	}
	if(m_iPointCount <= iTimes)
	{
		KillTimer(ID_TIMER_DRAW_POINT);
		m_bIsFinishDraw = true;
		return ;
	}
	
	CPaintDC dc(this);
	CDC *pMyDC = (GetDlgItem(IDC_COORD))->GetDC();
	
	
	m_IntervalPan = (m_right-20 - m_left)/20;
	if (m_IntervalPan < 1 ) m_IntervalPan =1;
	m_Interval = (m_bottom - m_top-20)/10;
	int iBaseX = m_left;
	//int iStepX = m_IntervalPan*10/150*TIME_DRAW/TIME_BASE;
	int iBaseY = (m_bottom - m_top +2)/2 + m_Interval/2;
	//	int iStepY = m_Interval/2*TIME_DRAW/TIME_BASE;
	
	CPen* pPenRed = new CPen;
	pPenRed->CreatePen(PS_SOLID,1,RGB(255,0,0));
	CGdiObject* pOldPen = pMyDC->SelectObject(pPenRed);	
	int iAx = iBaseX + iTimes*m_IntervalPan*10/150*TIME_DRAW/TIME_BASE*300/m_iPointCount;
	//	int iAy = iBaseY  -  m_uPointA[iTimes]*m_Interval/2;
	int	iAy = m_bottom - m_Interval/4 - (m_bottom - m_top-20)/(m_ymax - m_ymin)*(m_uPointA[iTimes] - m_ymin); 
	static int iOldAX = iAx;
	static int iOldAY = iAy;
	if(iTimes == 0)
	{
		iOldAX = iAx;
		iOldAY = iAy;
		
	}
	TRACE("pointA:%d,%d\n",iAx,iAy);	
	pMyDC->MoveTo(iOldAX,iOldAY);
	pMyDC->LineTo(iAx,iAy);
	iOldAX =iAx;
	iOldAY = iAy;
	m_uDrawedPointA[iTimes] = m_uPointA[iTimes];
	TRACE("iTimes=%d\n",iTimes);
	
	CPen* pPenBlue = new CPen;	
	pPenBlue->CreatePen(PS_SOLID,1,RGB(0,0, 255));
	pMyDC->SelectObject(pPenBlue);	
	int iBx = iBaseX + iTimes*m_IntervalPan*10/150*TIME_DRAW/TIME_BASE*300/m_iPointCount;
	//int iBy = iBaseY  -  m_uPointB[iTimes]*m_Interval/2;
	int iBy = m_bottom - m_Interval/4 - (m_bottom - m_top-20)/(m_ymax - m_ymin)*(m_uPointB[iTimes] - m_ymin);  
	static int iOldBX = iBx;
	static int iOldBY = iBy;
	if(iTimes == 0)
	{
		iOldBX = iBx;
		iOldBY = iBy;
		
	}
	TRACE("pointB:%d,%d\n",iBx,iBy);	
	pMyDC->MoveTo(iOldBX,iOldBY);
	pMyDC->LineTo(iBx,iBy);
	iOldBX =iBx;
	iOldBY = iBy;
	m_uDrawedPointB[iTimes] = m_uPointB[iTimes];
	
	CPen* pPenC = new CPen;	
	pPenC->CreatePen(PS_SOLID,1,RGB(0,0,0));
	pMyDC->SelectObject(pPenC);	
	int iCx = iBaseX + iTimes*m_IntervalPan*10/150*TIME_DRAW/TIME_BASE*300/m_iPointCount;
	//int iCy = iBaseY  -  m_uPointC[iTimes]*m_Interval/2;
	int iCy = m_bottom - m_Interval/4 - (m_bottom - m_top-20)/(m_ymax - m_ymin)*(m_uPointC[iTimes] - m_ymin); 
	//(m_bottom - m_top +2)/2 + m_Interval/2;
	static int iOldCX = iCx;
	static int iOldCY = iCy;
	if(iTimes == 0)
	{
		iOldCX = iCx;
		iOldCY = iCy;
		
	}
	TRACE("pointC:%d,%d\n",iCx,iCy);	
	pMyDC->MoveTo(iOldCX,iOldCY);
	pMyDC->LineTo(iCx,iCy);
	iOldCX =iCx;
	iOldCY = iCy;
	m_uDrawedPointC[iTimes] = m_uPointC[iTimes];
	
	pMyDC->SelectObject(pOldPen);	
	delete pPenRed;
	delete pPenBlue;
	delete pPenC;
	iTimes++;
}

void CFiberTestClientView::ReadPoint() //从暂存中读取数据,并写数据库
{
	static int iTimes=0;
	if(m_iPointCount <= iTimes)
	{
		KillTimer(ID_TIMER_READ_POINT);
		return;
	}
	
	//	m_uTempPointA = m_uTempPointB = m_uTempPointC = 8;
	
	//读暂存
	m_uPointA[iTimes] = m_uTempPointA;
	m_uPointB[iTimes] = m_uTempPointB;
	m_uPointC[iTimes] = m_uTempPointC;

	
	//开启绘A,B,C曲线的定时器
	if(!m_bIsSetDrawPoint)
	{
		SetTimer(ID_TIMER_DRAW_POINT,TIME_DRAW,NULL);
		m_bIsSetDrawPoint = true;
	}
}


void CFiberTestClientView::InitData()
{
	if(NULL != m_uPointA && !m_bIsFinishDraw)
	{
		AfxMessageBox("正在测试!");
		return;
	}
	
	if(NULL != m_uPointA && m_bIsFinishDraw)
	{
		if(NULL != m_uPointA)
		{
			delete []m_uPointA;
			m_uPointA = NULL;
		}
    	if(NULL != m_uPointB)
		{
			delete []m_uPointB;
			m_uPointB = NULL;
		}
		if(NULL != m_uPointC)
		{
			delete []m_uPointC;
			m_uPointC = NULL;
		}
		if(NULL != m_uDrawedPointA)
		{
			delete []m_uDrawedPointA;
			m_uDrawedPointA = NULL;
		}
		if(NULL != m_uDrawedPointB)
		{
			delete []m_uDrawedPointB;
			m_uDrawedPointB = NULL;
		}
		if(NULL != m_uDrawedPointC)
		{
			delete []m_uDrawedPointC;
			m_uDrawedPointC = NULL;
		}
		m_bIsSetReadPoint = false;
		m_bIsSetDrawPoint = false;
		m_bIsFinishDraw = false;
		m_bIsReTest =true;
	}
	if(NULL == m_uPointA)
	{
		m_xtime = m_xtime1;
		OnPaint() ;
		m_iPointCount = (m_xtime * 1000)/TIME_DRAW;
		
		m_uPointA = new UINT[m_iPointCount];	//A点的数据
		m_uPointB = new UINT[m_iPointCount];	//B....
		m_uPointC = new UINT[m_iPointCount];	//C....
		m_uDrawedPointA = new UINT[m_iPointCount];//已画过的A点的数据;
		m_uDrawedPointB = new UINT[m_iPointCount];//........B.......
		m_uDrawedPointC = new UINT[m_iPointCount];//........C.......
		
		for(int i=0; i<m_iPointCount; i++)
		{
			*(m_uPointA+i) = POINT_NULL;
			
		}
		//memcpy(m_uPointB,m_uPointA,m_iPointCount*sizeof(UINT));
		memcpy(m_uPointC,m_uPointA,m_iPointCount*sizeof(UINT));
		memcpy(m_uPointB,m_uPointA,m_iPointCount*sizeof(UINT));
		memcpy(m_uDrawedPointA,m_uPointA,m_iPointCount*sizeof(UINT));
		memcpy(m_uDrawedPointB,m_uPointA,m_iPointCount*sizeof(UINT));
		memcpy(m_uDrawedPointC,m_uPointA,m_iPointCount*sizeof(UINT));
		OnPaint();
		if(NULL != m_uPointA 
			&& NULL != m_uPointB
			&& NULL != m_uPointC
			&& NULL != m_uDrawedPointA
			&& NULL != m_uDrawedPointB
			&& NULL != m_uDrawedPointC)

		{
			Read();
#ifdef INPUT_DATA
			if(!m_bIsSetReadPoint)//读串口
			{
				SetTimer(ID_TIMER_READ_POINT,TIME_DRAW,NULL);
				m_bIsSetReadPoint = true;
			}
/*#else
			if(!m_bIsSetDrawPoint)//直接读数据库
			{
				SetTimer(ID_TIMER_DRAW_POINT,TIME_DRAW,NULL);
				m_bIsSetDrawPoint = true;
			}
*/#endif
		}
		else
		{
			AfxMessageBox("内存申请失败!");
		}
	}
	
}

⌨️ 快捷键说明

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