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

📄 scanscope.cpp

📁 示例随机数产生方法
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		
	}
	//------------画速度曲线--------
	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 + -