📄 navigategraph.cpp
字号:
// NavigateGraph.cpp : implementation file
//
#include "stdafx.h"
#include "NavigateGraph.h"
#include <math.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNavigateGraph
CNavigateGraph::CNavigateGraph()
{
for( int i = 0 ;i<MAX_SENSOR;i++ )
{
m_dData[i] = 0.0;
}
m_fRatio = 0.5;
}
CNavigateGraph::~CNavigateGraph()
{
}
BEGIN_MESSAGE_MAP(CNavigateGraph, CStatic)
//{{AFX_MSG_MAP(CNavigateGraph)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNavigateGraph message handlers
void CNavigateGraph::SetData(double data[],int nSize)
{
if( nSize > sizeof(m_dData) )
{
return;
}
memcpy(m_dData,data,nSize);
InvalidateRect(0);
}
void CNavigateGraph::SetRatio(float fRatio)
{
m_fRatio = fRatio;
}
#undef PI
#define PI 3.1415926
void CNavigateGraph::OnPaint()
{
CRect rc;
int i;
int r;
CPoint center;
CPoint pt0,pt1;
double ratio = 1.0;
CString label;
CString str;
CPen pen;
CPen back_pen;
CPen* pOldPen = NULL;
CPaintDC dc(this); // device context for painting
GetClientRect(&rc);
ratio = 1.0 * rc.Width()/rc.Height();
dc.SelectStockObject(DKGRAY_BRUSH);
dc.PatBlt(0,0,rc.right-rc.left,rc.bottom - rc.top,PATCOPY);
pen.CreatePen(PS_SOLID,3,RGB(255,0,0));
pOldPen = dc.SelectObject(&pen);
//draw a ellipse
CRect rcEllipse;
rcEllipse.left = rc.Width()/3;
rcEllipse.right = rcEllipse.left + rc.Width()/3;
rcEllipse.top = rc.Height()/3;
rcEllipse.bottom = rcEllipse.top + rc.Height()/3;
dc.SelectStockObject(DKGRAY_BRUSH);
dc.Ellipse(rcEllipse);
r = rcEllipse.Width()/2;
center.x = rc.Width()/2;
center.y = rc.Height()/2;
//fill the data
for( i = 0; i< MAX_SENSOR; i++ )
{
pt0.x = (int)(r*cos( (i+1) *PI/4));
pt0.y = (int)(r*sin( (i+1) *PI/4));
pt1.x = (int)((r+m_dData[i]*m_fRatio)*cos((i+1)*PI/4));
pt1.y = (int)((r+m_dData[i]*m_fRatio)*sin((i+1)*PI/4));
pt0.y = (int)(pt0.y/ratio);
pt1.y = (int)(pt1.y/ratio);
pt0 += center;
pt1 += center;
pt0.y = rc.Height() - pt0.y;
pt1.x = (pt1.x>rc.Width())?rc.Width():pt1.x;
pt1.y = (pt1.y>rc.Height())?rc.Height():pt1.y;
pt1.y = rc.Height() - pt1.y;
dc.MoveTo(pt0);
dc.LineTo(pt1);
label.Format("%0.2f",m_dData[i]);//小数点两位
dc.TextOut(pt1.x,pt1.y,label);
}
pen.DeleteObject();
dc.SelectObject(&pOldPen);
}
#undef PI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -