第一步:新建MFC。
VC++6.0的话是文件--新建--工程--MFCAppWizard(exe)--填写工程名称--确定(其他的可以不动)--点单文档--直接点完成就行了。
第二步:找到OnDraw(CDC *pDC)这个函数名。
这个函数名在--C+你的工程名字+View里面,点开这个,就可以看见OnDraw(CDC *pDC)了,双击,然后看见:// TODO: add draw code for native data here。在下面插入画函数曲线代码就可以了,其他的地方代码不需要修改。
下面我给个案例:y=sinx 函数的曲线代码。当然头文件不能少:#include "math.h" 和 #define PI 3.14159;
void CGraphView::OnDraw(CDC* pDC)
{
CGraphDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
//绘制画笔
CPen cpen,pen;
cpen.CreatePen(PS_SOLID,4,RGB(0,0,0));
pen.CreatePen(PS_SOLID,2,RGB(255,0,0));
pDC->SelectObject(&cpen);
//指定原点
pDC->SetViewportOrg(300,300);
pDC->SetTextColor(RGB(255,0,0));
//绘制横坐标
CString sPIText[]={"-1/2π","1/2π","π","3/2π","2π","5/2π","3π","7/2π","4π","9/2π","5π"};
for(int n=-1,nTemp=0;nTemp<=660;n++,nTemp+=60)
{
pDC->LineTo(60*n,0);//坐标横线
pDC->LineTo(60*n,-5);
pDC->MoveTo(60*n,0);
pDC->TextOut(60*n-sPIText[n+1].GetLength()*3,16,sPIText[n+1]);
}
pDC->MoveTo(0,0);
CString sTemp;
//绘制纵坐标
for(n=-4,nTemp=0;nTemp<=180;n++,nTemp=60*n)
{
pDC->LineTo(0,60*n);
pDC->LineTo(5,60*n);
pDC->MoveTo(0,60*n);
sTemp.Format("%d",-n);
pDC->TextOut(10,60*n,sTemp);
}
double y,radian;
pDC->SelectObject(&pen);
//绘制相关曲线
for(int x=-60;x<600;x++)
{
//弧度=X坐标/曲线宽度*角度*π
//Y坐标=振幅*曲线宽度*sin(弧度)
radian=x/((double)60*2)*PI;
y=sin(radian)*2*60;
pDC->MoveTo((int)x,-(int)y);
pDC->LineTo((int)x,-(int)y);
}
cpen.DeleteObject();
pen.DeleteObject();}
代码运行如下:
下面说一下在VS2010下的MFC画函数曲线:
第一步:新建MFC项目
文件--新建--项目--其他语言--Visual C++--MFC--MFC应用程序--输入名称--点确定(其他不动)--下一步--单个文档--在项目类型你可以选自己喜欢的,都有预览--完成。
第二步:插入画函数曲线代码
同样的,在源文件夹下找到 ”你的项目名称+view.cpp“”文件,如果没有解决方案窗口,在视图菜单下可以打开。接着找到“void CtestView::OnDraw(CDC* /*pDC*/)”这个函数,在“// TODO: 在此处为本机数据添加绘制代码”下插入代码,代码跟刚才的代码一样,不过跑的结果不太一样,你可以把"//绘制曲线"那部分代码放在"//绘制横纵坐标"的前面,运行结果就跟上面是一样的了。当然也要插入那两个头文件。
做完之后会发现很有意思,想画什么函数就画什么函数曲线。这篇文章横纵坐标都是扩大了60倍,我们可以自己折腾一下,很快就懂了画函数曲线MoveTO()和LineTo()两个函数了。谢谢了!文章不妥之处望批评指正,有什么问题可以私信我,知无不言,我也是一个菜鸟。