(1)新建单文档工程Plot
(2)为工程添加Max.h。代码如下:class Max
{
public:
Max(double,double,double,double);
double Max4();
~Max(void);
private:
double x1,x2,x3,x4;
double Max2(double,double);
};
Max.cpp的代码如下:
#include "Max.h"
Max::Max(double a,double b,double c,double d)
{
x1=a;x2=b;x3=c;x4=d;
}
double Max::Max2(double a,double b)
{
if(a>=b)return a;
else return b;
}
double Max::Max4()
{
return Max2(Max2(x1,x2),Max2(x3,x4));
}
Max::~Max(void)
{
}
(3)在CPlotDoc.cpp中包含Max.h。
#include“Max.h”
(4)为CPlotDoc类添加一个公有void类型的函数Find和一个公有int类型数据成员m_num[5],使用Max类产生对象并计算他们的最大值,将他们转换成int型,并存入m_num.
void CPlotDoc::Find()
{
Max a(110.5,120.8,110,68);
Max b(130,256.5,90,200);
Max c(125,406.8,350,300);
Max d(120,356.8,300,280.5);
Max e(102,256.8,120,105);
m_num[0]=(int)a.Max4();
m_num[1]=(int)b.Max4();
m_num[2]=(int)c.Max4();
m_num[3]=(int)d.Max4();
m_num[4]=(int)e.Max4();
}
在类视图中单击CPlotDoc的OnNewDocument()函数,增加调用语句,准备数据。
BOOL CPlotDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: 在此添加重新初始化代码
if(!CDocument::OnNewDocument())
return FALSE;
Find();
// (SDI 文档将重用该文档)
return TRUE;
}
(6)在视图类中完成图形的绘制。
void CPlotView::OnDraw(CDC* pDC)
{
CPlotDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: 在此处为本机数据添加绘制代码
pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetViewportOrg(50,250);
pDC->MoveTo(0,0);
pDC->LineTo(1100,0);
pDC->MoveTo(0,0);
pDC->LineTo(0,600);
int width=40;
char ch='A';
CBrush brush;
brush.CreateSolidBrush(RGB(250,0,0));
pDC->SelectObject(brush);
for(int i=1;i<6;i++,ch++)
{
pDC->Rectangle(200*i,0,200*i+width,pDoc->m_num[i-1]);
pDC->TextOut(200*i+10,-10,(CString)ch);
}
CFont font;
font.CreateFontA(0,0,0,0,800,0,0,0,OEM_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"楷体");
pDC->SelectObject(font);
pDC->TextOutA(200,550,"某某公司分销点月销售量柱状图");
}
如此就完成了柱形图的绘制。