📄 scanscope.cpp
字号:
}
//------------画速度曲线--------
pDC->SelectObject(&m_penValue3);
if(bReverse==FALSE)
{
pDC->Polyline(ptValue3,nCount);
}
else
{
pDC->Polyline(ptValue3,nPos);
pDC->Polyline(&ptValue3[nPos],nCount-nPos);
}
pDC->SelectClipRgn(NULL);
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);
}
void CScanScope::DrawFrameText(CDC *pDC)
{
CPen *pOldPen;
CFont *pOldFont;
pOldFont = pDC->SelectObject(&m_fontAxis);
CRect rect = m_rectCurve;
int i;
CString str;
pDC->SetBkMode(TRANSPARENT);
for(i=0;i<5;i++)
{
if(fabs(2*m_dDimY-i*m_dDimY)<1)
str.Format("%.1f",2*m_dDimY-i*m_dDimY);
else if(fabs(2*m_dDimY-i*m_dDimY)<999)
str.Format("%.0f",2*m_dDimY-i*m_dDimY);
else
str.Format("%.0fK",(2*m_dDimY-i*m_dDimY)/1000.0);
pDC->SetTextAlign(TA_RIGHT);
pDC->TextOut(rect.left-2,18+i*(rect.Height())/4,str);
if(fabs(2*m_dDimW-i*m_dDimW)<1)
str.Format("%.1f",2*m_dDimW-i*m_dDimW);
else if(fabs(2*m_dDimW-i*m_dDimW)<999)
str.Format("%.0f",2*m_dDimW-i*m_dDimW);
else
str.Format("%.0fK",(2*m_dDimW-i*m_dDimW)/1000.0);
pDC->SetTextAlign(TA_LEFT);
pDC->TextOut(rect.right+2,18+i*(rect.Height())/4,str);
str.Format("%.1f",i*m_dDimT);
pDC->TextOut(rect.left-18+i*rect.Width()/4,rect.bottom+2,str);
}
str=_T("给定位置");
pDC->TextOut(rect.left+10,rect.top-20,str);
str=_T("实际位置");
pDC->TextOut(rect.left+10+rect.Width()/3,rect.top-20,str);
str=_T("实际速度");
pDC->TextOut(rect.left+10+2*rect.Width()/3,rect.top-20,str);
str=m_strTitle;
pDC->TextOut(rect.left+10+2*rect.Width()/3,rect.top-20,str);
pOldPen = pDC->SelectObject(&m_penValue1);
pDC->MoveTo(rect.left+60,rect.top-10);
pDC->LineTo(rect.left+90,rect.top-10);
pDC->SelectObject(&m_penValue2);
pDC->MoveTo(rect.left+60+rect.Width()/3,rect.top-10);
pDC->LineTo(rect.left+90+rect.Width()/3,rect.top-10);
pDC->SelectObject(&m_penValue3);
pDC->MoveTo(rect.left+60+2*rect.Width()/3,rect.top-10);
pDC->LineTo(rect.left+90+2*rect.Width()/3,rect.top-10);
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldFont);
}
void CScanScope::DrawCurveFrame(CDC *pDC)
{
pDC->FillRect(&m_rectCurve,&m_brushCurve);
pDC->DrawEdge(&m_rectCurve,EDGE_SUNKEN,BF_RECT);
}
inline int CScanScope::ConvertTimeToAxisX(double time)
{
return m_rectCurve.left+(int)( ( time / m_dDimT ) * (double)( m_rectCurve.Width() / 4 ) ) % m_rectCurve.Width();
}
inline int CScanScope::ConvertValueToAxisY(double pos)
{
return m_rectCurve.top+m_rectCurve.Height() / 2 - (int)( ( pos / m_dDimY ) * (double)( m_rectCurve.Height() / 4 ) );
}
inline int CScanScope::ConvertValueToAxisW(double rate)
{
return m_rectCurve.top+m_rectCurve.Height() / 2 - (int)( ( rate / m_dDimW ) * (double)( m_rectCurve.Height() / 4 ) ) ;
}
void CScanScope::AddValue(double t,double y1,double y2,double w)
{
if(m_bDrawing)
return;
if(m_timeList.size()>MAX_GRAPH_DOT)
return;
m_timeList.push_back(t);
m_ValueList1.push_back(y1);
m_ValueList2.push_back(y2);
m_ValueList3.push_back(w);
}
void CScanScope::UpdateCurve()
{
CClientDC dc(this);
DrawCurve(&dc);
}
void CScanScope::SetDimT(double dNewT)
{
m_dDimT=dNewT;
Invalidate();
}
void CScanScope::SetDimY(double dNewY)
{
m_dDimY=dNewY;
Invalidate();
}
void CScanScope::SetDimW(double dNewW)
{
m_dDimW=dNewW;
Invalidate();
}
void CScanScope::SetTitle(CString strTitle)
{
m_strTitle = strTitle;
Invalidate();
}
void CScanScope::DrawArrow(CDC *pDC,int nIndex,BOOL bLighted)
{
CBrush brush1(RGB(128,128,128)),brush2(RGB(0,255,0));
switch(nIndex)
{
case 0:
if(bLighted)
pDC->FillRgn(&m_rgnYPlus,&brush2);
else
pDC->FillRgn(&m_rgnYPlus,&brush1);
break;
case 1:
if(bLighted)
pDC->FillRgn(&m_rgnYMinus,&brush2);
else
pDC->FillRgn(&m_rgnYMinus,&brush1);
break;
case 2:
if(bLighted)
pDC->FillRgn(&m_rgnTPlus,&brush2);
else
pDC->FillRgn(&m_rgnTPlus,&brush1);
break;
case 3:
if(bLighted)
pDC->FillRgn(&m_rgnTMinus,&brush2);
else
pDC->FillRgn(&m_rgnTMinus,&brush1);
break;
case 4:
if(bLighted)
pDC->FillRgn(&m_rgnWPlus,&brush2);
else
pDC->FillRgn(&m_rgnWPlus,&brush1);
break;
case 5:
if(bLighted)
pDC->FillRgn(&m_rgnWMinus,&brush2);
else
pDC->FillRgn(&m_rgnWMinus,&brush1);
break;
}
}
void CScanScope::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
if(m_rgnYPlus.PtInRegion(point))//&&m_nArrowIndex !=0)
{
m_nArrowIndex =0;
DrawArrow(&dc,m_nArrowIndex,TRUE);
}
if(m_rgnYMinus.PtInRegion(point))//&&m_nArrowIndex !=1)
{
m_nArrowIndex =1;
DrawArrow(&dc,m_nArrowIndex,TRUE);
}
if(m_rgnTPlus.PtInRegion(point))//&&m_nArrowIndex !=2)
{
m_nArrowIndex =2;
DrawArrow(&dc,m_nArrowIndex,TRUE);
}
if(m_rgnTMinus.PtInRegion(point))//&&m_nArrowIndex !=3)
{
m_nArrowIndex =3;
DrawArrow(&dc,m_nArrowIndex,TRUE);
}
if(m_rgnWPlus.PtInRegion(point))//&&m_nArrowIndex !=3)
{
m_nArrowIndex =4;
DrawArrow(&dc,m_nArrowIndex,TRUE);
}
if(m_rgnWMinus.PtInRegion(point))//&&m_nArrowIndex !=3)
{
m_nArrowIndex =5;
DrawArrow(&dc,m_nArrowIndex,TRUE);
}
if(!m_rgnYPlus.PtInRegion(point)&&
!m_rgnYMinus.PtInRegion(point)&&
!m_rgnTPlus.PtInRegion(point)&&
!m_rgnTMinus.PtInRegion(point)&&
!m_rgnWMinus.PtInRegion(point)&&
!m_rgnWPlus.PtInRegion(point)&&
m_nArrowIndex!=-1)
{
DrawArrow(&dc,m_nArrowIndex,FALSE);
m_nArrowIndex = -1;
}
CStatic::OnMouseMove(nFlags, point);
}
void CScanScope::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_rgnYPlus.PtInRegion(point))
{
if(m_dDimY<0.99999)
m_dDimY+=0.1;
else if(m_dDimY<10)
m_dDimY+=1;
else if(m_dDimY<100)
m_dDimY+=10;
else
m_dDimY=min(m_dDimY+100,500);
Invalidate();
}
if(m_rgnYMinus.PtInRegion(point))
{
if(m_dDimY<=1)
m_dDimY=max(m_dDimY-0.1,0.1);
else if(m_dDimY>1&&m_dDimY<=10)
m_dDimY-=1;
else if(m_dDimY<=100)
m_dDimY-=10;
else
m_dDimY-=100;
Invalidate();
}
if(m_rgnWPlus.PtInRegion(point))
{
if(m_dDimW<0.99999)
m_dDimW+=0.1;
else if(m_dDimW<10)
m_dDimW+=1;
else if(m_dDimW<100)
m_dDimW+=10;
else
m_dDimW=min(m_dDimW+100,500);
Invalidate();
}
if(m_rgnWMinus.PtInRegion(point))
{
if(m_dDimW<=1)
m_dDimW=max(m_dDimW-0.1,0.1);
else if(m_dDimW>1&&m_dDimW<=10)
m_dDimW-=1;
else if(m_dDimW<=100)
m_dDimW-=10;
else
m_dDimW-=100;
Invalidate();
}
if(m_rgnTPlus.PtInRegion(point))
{
m_dDimT+=0.1;
Invalidate();
}
if(m_rgnTMinus.PtInRegion(point))
{
m_dDimT=max(m_dDimT-0.1,0.1);
Invalidate();
}
CStatic::OnLButtonDown(nFlags, point);
}
void CScanScope::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CStatic::OnLButtonUp(nFlags, point);
}
UINT CScanScope::OnNcHitTest(CPoint point)
{
// TODO: Add your message handler code here and/or call default
return HTCLIENT;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -