lineview.cpp

来自「串口通讯演示程序」· C++ 代码 · 共 788 行 · 第 1/2 页

CPP
788
字号
	int LeftOffset=60;
	int BottomOffset=30;
	int TopOffset=10;
	float ftemp,fRect;
	COLORREF crColor;
	CPen *pen,*oldPen;

	if(ColroFlag==0)
		crColor=app->LineColor.ErrRateColA;//RGB(0,0,255);
	else
		crColor=app->LineColor.ErrRateColB;//RGB(64,128,128);

	pen=new CPen(PS_SOLID,1,crColor);
//	pen.CreatePen(PS_SOLID,1,crColor);
	oldPen=pDC->SelectObject(pen);

	fRect=(float)(rect.bottom/2-TopOffset-BottomOffset);
	fRect*=100;
	for(UINT x=0;x<1440;x++)
	{
//误码
		if(ColroFlag==0 && ErrCodeRate_str[0].total[x]>0)
				ftemp=fRect*ErrCodeRate_str[0].ErrCodeRate_t[x]/ErrCodeRate_str[0].MaxVal/100;
		else if(ColroFlag!=0 && ErrCodeRate_str[1].total[x]>0)
				ftemp=fRect*ErrCodeRate_str[1].ErrCodeRate_t[x]/ErrCodeRate_str[1].MaxVal/100;
		else
			continue;
		pDC->MoveTo(x+LeftOffset,rect.bottom-BottomOffset);
		pDC->LineTo(x+LeftOffset,rect.bottom-BottomOffset-(int)ftemp);
	}
	pDC->SelectObject(oldPen);
	delete pen;

	if(ColroFlag==0)
		crColor=app->LineColor.DataColA;//RGB(0,0,255);
	else
		crColor=app->LineColor.DataColB;//RGB(64,128,128);

	pen=new CPen(PS_SOLID,1,crColor);
	oldPen=pDC->SelectObject(pen);
	for(x=0;x<1440;x++)
	{
//流量
		if(ColroFlag==0 && ErrCodeRate_str[0].total[x]>0)
			ftemp=fRect*ErrCodeRate_str[0].total[x]/100/ErrCodeRate_str[0].MaxTotal+1;
		else if(ColroFlag!=0 && ErrCodeRate_str[1].total[x]>0)
			ftemp=fRect*ErrCodeRate_str[1].total[x]/100/ErrCodeRate_str[1].MaxTotal+1;
		else
			continue;
		pDC->MoveTo(x+LeftOffset,(rect.bottom-BottomOffset)/2);
		pDC->LineTo(x+LeftOffset,(rect.bottom-BottomOffset)/2-(int)ftemp);
	}
	pDC->SelectObject(oldPen);
	delete pen;

//无数据
	crColor=app->LineColor.NoDataCol;//RGB(255,0,0);
	pen=new CPen(PS_SOLID,1,crColor);
	oldPen=pDC->SelectObject(pen);
	fRect=(float)(rect.bottom/2-TopOffset-BottomOffset);
	fRect*=100;
	for(x=0;x<1440;x++)
	{
		if(ColroFlag==0)
		{
			if(ErrCodeRate_str[0].total[x]<=0 && ErrCodeRate_str[0].run[x]==1)
			{
				pDC->MoveTo(x+LeftOffset,(rect.bottom-BottomOffset)/2);
				pDC->LineTo(x+LeftOffset,(rect.bottom-BottomOffset)/2-5);
			}
		}
		else
		{
			if(ErrCodeRate_str[1].total[x]<=0 && ErrCodeRate_str[1].run[x]==1)
			{
				pDC->MoveTo(x+LeftOffset,(rect.bottom-BottomOffset)/2);
				pDC->LineTo(x+LeftOffset,(rect.bottom-BottomOffset)/2-5);
			}
		}
	}
	pDC->SelectObject(oldPen);
	delete pen;

}
void CLineView::DrawXText(CDC *pDC, CRect rect)
{
	int LeftOffset=60;
	int BottomOffset=30;
	CString str1;
	COLORREF crColor;
//画标尺
//X方向
	crColor=app->LineColor.FlagCol;//RGB(255,0,0);
	CPen pen(PS_SOLID,1,crColor);
	CPen *oldPen=pDC->SelectObject(&pen);
	for(int i=0;i<1440/60;i++)
	{
		//时间
		str1.Format("%02u:00",i);
		pDC->TextOut(i*60+5+LeftOffset,rect.bottom-BottomOffset+10,str1);
		//短线
		pDC->MoveTo(i*60+LeftOffset,rect.bottom-BottomOffset);
		pDC->LineTo(i*60+LeftOffset,rect.bottom-BottomOffset+10);
	}
	pDC->SelectObject(oldPen);
}

void CLineView::DrawCrusorData(CDC *pDC, err_struct *ErrCodeRatestr, CRect rect,int Cx,int Cy,int OffsetX,int AB)
{
//画十字线
	CString str1;
	int LeftOffset=60;
	int BottomOffset=30;
	COLORREF crColor;

	AB%=2;
	crColor=app->LineColor.CursorCol;//RGB(255,0,0);
	if(app->ShowMouseFlag==0)
	{
		CPen pen2(PS_SOLID,1,crColor);
		CPen *oldPen2=pDC->SelectObject(&pen2);
		pDC->MoveTo(Cx,rect.top);
		pDC->LineTo(Cx,rect.bottom);
		pDC->MoveTo(rect.left,Cy);
		pDC->LineTo(rect.right,Cy);
		pDC->SelectObject(oldPen2);
//////////////////////////////////////////
//显示数值	
		int i=(Cx+OffsetX-LeftOffset);
		if(i>=0 && i<1440)
		{
			str1.Format("%02u:%02u (%2.2f%%),(%0.0f)",
				i/60,
				i%60,
				ErrCodeRate_str[AB].ErrCodeRate_t[i],
//				ErrCodeRate_str[AB].total[i]*1.25/6	//分钟实际值*1.25=扩大80%的效率为100%
				ErrCodeRate_str[AB].total[i]/6.00
				);
			if(rect.right>Cx+140)
				pDC->TextOut(Cx+3,Cy-18,str1);
			else
				pDC->TextOut(Cx-155,Cy-18,str1);
		}
	}
}

void CLineView::DrawYLine(CDC *pDC, err_struct *ErrCodeRatestr, CRect rect,int AB)
{
	CString str1;
	int LeftOffset=60;
	int BottomOffset=30;
	int i;
	int TopOffset=10;
	COLORREF crColor;
	float t=10;

	AB%=2;
	float fRect=(float)(rect.bottom/2-TopOffset-BottomOffset);
	fRect/=10;

	crColor=app->LineColor.FlagCol;//RGB(255,0,0);
	CPen pen3(PS_SOLID,1,crColor);
	CPen *oldPen3=pDC->SelectObject(&pen3);

//画坐标
	pDC->MoveTo(LeftOffset,rect.bottom-5);
	pDC->LineTo(LeftOffset,rect.top+5);
	pDC->MoveTo(5,rect.bottom-BottomOffset);
	pDC->LineTo(rect.right-5,rect.bottom-BottomOffset);
//流量
	pDC->MoveTo(LeftOffset*5/6,(rect.bottom-BottomOffset)/2-(int)(fRect*10));
	pDC->LineTo(LeftOffset,(rect.bottom-BottomOffset)/2-(int)(fRect*10));

	pDC->MoveTo(5,(rect.bottom-BottomOffset)/2);
	pDC->LineTo(rect.right-5,(rect.bottom-BottomOffset)/2);

//	t=(float)(ErrCodeRate_str[AB].MaxTotal*1.25/6);
	t=(float)(ErrCodeRate_str[AB].MaxTotal/6.00);
	str1.Format("%0.0f",t);
	pDC->TextOut(LeftOffset/6,(rect.bottom-BottomOffset)/2-(int)(fRect*10),str1);

//画标尺
//Y方向
	for(i=1;i<11;i++)
	{
		pDC->MoveTo(LeftOffset*5/6,rect.bottom-BottomOffset-(int)(fRect*i));
		pDC->LineTo(LeftOffset,rect.bottom-BottomOffset-(int)(fRect*i));
		if(i%5==0)
		{
			t=(float)(ErrCodeRate_str[AB].MaxVal/10);
			str1.Format("%2.2f",i*t);
			pDC->TextOut(LeftOffset/6,rect.bottom-BottomOffset-(int)(fRect*i)-(int)(fRect/2),str1);
		}
	}
	pDC->SelectObject(oldPen3);
}
void CLineView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZE));
	
	CScrollView::OnLButtonUp(nFlags, point);
}
void CLineView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZE));
	
	CScrollView::OnLButtonDown(nFlags, point);
}
void CLineView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	SetCursor(AfxGetApp()->LoadStandardCursor(IDC_SIZE));
	
	CScrollView::OnLButtonDblClk(nFlags, point);
}
void CLineView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	int LeftOffset=60;
	int k=0;
	CPoint point;
	CPoint CurPos;
	CSize size;
	CRect rect;
	RECT lpRect;

	GetWindowRect(&lpRect);
	GetClientRect(&rect);
	GetCursorPos(&CurPos);

	switch(nChar)
	{
	case VK_LEFT:
		if(::GetKeyState(VK_SHIFT)&0x8000)
			k=10;
		else
			k=1;

		if((int)Cx>=LeftOffset+k)
		{
			Cx-=k;
			CurPos.x-=k;
			SetCursorPos(CurPos.x,CurPos.y);
		}
		else
		{
			point=GetScrollPosition();
			if(point.x>=k)
			{
				point.x-=k;
				ScrollToPosition(point);
				OffsetX=point.x;
			}
		}
		break;
	case VK_RIGHT:
		if(::GetKeyState(VK_SHIFT)&0x8000)
			k=10;
		else
			k=1;
		if((int)Cx<rect.right-k)
		{
			Cx+=k;
			CurPos.x+=k;
			SetCursorPos(CurPos.x,CurPos.y);
		}
		else
		{
			point=GetScrollPosition();
			if(point.x<rect.right-k)
			{
				point.x+=k;
				ScrollToPosition(point);
				OffsetX=point.x;
			}
		}
		break;
	case VK_HOME:
		if(::GetKeyState(VK_SHIFT)&0x8000)
		{
			point.x=0;
			point.y=0;
			ScrollToPosition(point);
			OffsetX=point.x;
		}
		Cx=LeftOffset;
		CurPos.x=lpRect.right-rect.right+LeftOffset;
		SetCursorPos(CurPos.x,CurPos.y);
		break;
	case VK_END:
		if(::GetKeyState(VK_SHIFT)&0x8000)
		{

			point.y=0;
			point.x=1540-rect.right;
			ScrollToPosition(point);
			OffsetX=point.x;

			Cx=rect.right-(1540-(1440+LeftOffset))-1;
		}
		else
		{
			point=GetScrollPosition();
			if(1540-rect.right>point.x)
				Cx=rect.right-LeftOffset;
			else
				Cx=rect.right-(1540-(1440+LeftOffset))-1;
		}
		CurPos.x=lpRect.right-LeftOffset;
		SetCursorPos(CurPos.x,CurPos.y);
		break;
	default:
		return;
	}
	Invalidate();

	CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CLineView::OnErrRateColA()
{
	CString str;
	CColorDialog dlg(app->LineColor.ErrRateColA);
	if(dlg.DoModal()==IDOK)
	{
		app->LineColor.ErrRateColA=dlg.GetColor();
		str.Format("%u",app->LineColor.ErrRateColA);
		AfxGetApp()->WriteProfileString(_T("SetRParam"),_T("ErrRateColA"),str);
	}
}
void CLineView::OnErrRateColB()
{
	CString str;
	CColorDialog dlg(app->LineColor.ErrRateColB);
	if(dlg.DoModal()==IDOK)
	{
		app->LineColor.ErrRateColB=dlg.GetColor();
		str.Format("%u",app->LineColor.ErrRateColB);
		AfxGetApp()->WriteProfileString(_T("SetRParam"),_T("ErrRateColB"),str);
	}
}
void CLineView::OnDataColA()
{
	CString str;
	CColorDialog dlg(app->LineColor.DataColA);
	if(dlg.DoModal()==IDOK)
	{
		app->LineColor.DataColA=dlg.GetColor();
		str.Format("%u",app->LineColor.DataColA);
		AfxGetApp()->WriteProfileString(_T("SetRParam"),_T("DataColA"),str);
	}
}
void CLineView::OnDataColB()
{
	CString str;
	CColorDialog dlg(app->LineColor.DataColB);
	if(dlg.DoModal()==IDOK)
	{
		app->LineColor.DataColB=dlg.GetColor();
		str.Format("%u",app->LineColor.DataColB);
		AfxGetApp()->WriteProfileString(_T("SetRParam"),_T("DataColB"),str);
	}
}
void CLineView::OnNoDataCol()
{
	CString str;
	CColorDialog dlg(app->LineColor.NoDataCol);
	if(dlg.DoModal()==IDOK)
	{
		app->LineColor.NoDataCol=dlg.GetColor();
		str.Format("%u",app->LineColor.NoDataCol);
		AfxGetApp()->WriteProfileString(_T("SetRParam"),_T("NoDataCol"),str);
	}
}
void CLineView::OnFlagCol()
{
	CString str;
	CColorDialog dlg(app->LineColor.FlagCol);
	if(dlg.DoModal()==IDOK)
	{
		app->LineColor.FlagCol=dlg.GetColor();
		str.Format("%u",app->LineColor.FlagCol);
		AfxGetApp()->WriteProfileString(_T("SetRParam"),_T("FlagCol"),str);
	}
}
void CLineView::OnCursorCol()
{
	CString str;
	CColorDialog dlg(app->LineColor.CursorCol);
	if(dlg.DoModal()==IDOK)
	{
		app->LineColor.CursorCol=dlg.GetColor();
		str.Format("%u",app->LineColor.CursorCol);
		AfxGetApp()->WriteProfileString(_T("SetRParam"),_T("CursorCol"),str);
	}
}

⌨️ 快捷键说明

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