利用mfc动态画圆(已知圆心坐标,半径,以及每次转过的角度)

平台:vs2013

利用mfc画图的方法有很多,现在较多的使用teechart控件,虽然本篇文章没有涉及到teechart控件,但是以后应该会经常用到,所以在这里把teechart控件的使用方法大致说一下:

第一步首先需要下载teechart控件并安装,这里给出一个下载地址http://blog.csdn.net/leichelle/article/details/7994368,这篇文章也写了关于使用teechart控件的方法,下载地址在上面文章的最下面。

第二步将teechart控件引入到vs2013中并使用teechart控件,http://jingyan.baidu.com/article/c33e3f48ac6c5aea15cbb51f.html,上述文档介绍了如何在mfc中插入teechart控件及简单的使用方法,大家可以看一下。

现在回到画动态圆的主题上,这里主要用到了mfc画弧度的一个函数Arc来画圆,Arc函数的原型是

BOOL ArcTo( LPCRECT lpRect, POINT ptStart, POINT  ptEnd) 其中lpRect为弧形所属的矩形区域,椭圆就是根据这个矩形而生成的。 ptStart,ptEnd作用是用来指定弧形的开始点/结束点,真实的弧形开始点/结束点就是ptStart/ptEnd与矩形的几何中心连线交点。
第一步需要在vs2013建立一个mfc对话框应用程序。
第二步然后将对话框上的三个控件删除,添加一个按钮改名为画图,然后双击此按钮,在相应的响应函数中添加以下程序
void CMFCsscircleDlg::OnBnClickedOk()
{
	// TODO:  在此添加控件通知处理程序代码
	DrawEllipse();
}
DrawEllipse()函数程序如下:
void  CMFCsscircleDlg::DrawEllipse()
{

	int rr = 50;
	CPoint pt; //圆心
	//int r;  //半径
	pt.x = 100;
	pt.y = 100;
	for (int j = 0; j < 6; j++)
	{
		Sleep(1000);
		m_point[j].x = rr*cos(60*j*3.14/180);
		m_point[j].y = rr*sin(60 * j*3.14 / 180);

		m_point[j + 1].x = rr*cos(60 * (j + 1)*3.14 / 180);
		m_point[j + 1].y = rr*sin(60 * (j + 1)*3.14 / 180);

		CDC* pDC = GetDC();
		CPoint p1(100 + m_point[j].x,100-m_point[j].y);
		CPoint p2(100 + m_point[j+1].x, 100-m_point[j+1].y);
		CRect rt(pt.x - rr, pt.y - rr, pt.x + rr, pt.y + rr);
		pDC->Arc(rt, p1, p2);

		//pDC->EndPath();
		//CRgn rgn;
		//rgn.CreateFromPath(pDC);
		//CBrush brush(RGB(255, 255, 255));//根据自己需要填充颜色
		//pDC->FillRgn(&rgn, &brush);
		//SetTimer(1,3000, NULL);
	}

}
这里利用角度将一个圆分为六个部分,每部分的角度为60度,确定好圆心坐标,半径后,找到6个坐标点,每次画一部分延时1秒钟,并且利用弧度函数Arc将6个坐标点一次连接起来。
同时把void  CMFCsscircleDlg::DrawEllipse()加到.h文件中的类声明中,并且声明为public。运行程序,即可看到效果。

你可能感兴趣的:(mfc)