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 + -
显示快捷键?