C++ MFC 画函数曲线(包含坐标)


第一步:新建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()两个函数了。谢谢了!文章不妥之处望批评指正,有什么问题可以私信我,知无不言,我也是一个菜鸟。

你可能感兴趣的:(C++)