码迷,mamicode.com
首页 > 其他好文 > 详细

深入浅出CChart 每日一课——快乐高四第十一课 不离不弃,利用CChartWnd实现多区域绘图

时间:2015-08-28 23:24:33      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:cchart   多区域绘图   

笨笨在前面的课程里面提到,在一个窗口上不能粘多个CChartWnd,否则图像不正常,故而在高四6到8课,均使用CChart类,实现了在普通窗口、对话框窗口、DuiLib窗口上的多区域绘图。

使用CChart类必须手动处理消息,而采用CChartWnd类省去了处理消息的步骤,编程更为简便。

近几天笨笨进行了一些改进,采用CChartWnd类也可以在一个窗口上多区域绘图了。

1 首先按照前面的步骤建立一个基于Win32 Application的程序,名为LessonA11。

2 在WndProc函数之前,建立一个函数,用于绘制等高线。

double f(double x, double y)
{
	return 1.0/(x*x+y*y+1.0);
}

3 在WndProc函数里面靠前的位置,设置如下几个变量。

static CChartWnd chartWnd;
RECT rect, rt1, rt2;

4 在WndProc函数里面,增加WM_CREATE消息的处理例程如下。

case WM_CREATE:
			GetClientRect(hWnd, &rect);
			rt1 = rect;
			rt2 = rect;
			rt1.right = (10*rect.left + 9*rect.right)/19;
			rt2.left = (9*rect.left + 10*rect.right)/19;

			chartWnd.Attach(hWnd, kTypeXY, rt1);
			chartWnd.Attach(hWnd, kTypeContour, rt2);

			chartWnd.GetChart(0)->AddPoint2D(0.0, 0.0);
			chartWnd.GetChart(0)->AddPoint2D(1.0, 2.0);
			chartWnd.GetChart(0)->AddPoint2D(2.0, 2.0);
			chartWnd.GetChart(0)->AddPoint2D(3.0, 0.0);
			chartWnd.GetChart(0)->SetBkgndColor(GetSysColor(COLOR_3DFACE));

			chartWnd.GetChart(1)->SetFieldFcn(f);
			chartWnd.GetChart(1)->SetPlotRange(-1, 1, -1, 1);
			chartWnd.GetChart(1)->SetBkgndColor(RGB(200, 255, 255));
			break;

运行结果如图。

技术分享

这里要注意到,笨笨并没有添加多个CChartWnd变量,而是只有一个。这个CChartWnd变量两次Attach到同一个窗口hWnd上了。当然,既然要分区域,Attch的时候就要设定要绘制的区域(也可以在WM_SIZE消息里用SetConfineRect设置)

还有一点要注意,在笨笨目前的实现版本里面,只能向同一个窗口句柄hWnd多次Attach。如果又向另一个窗口句柄Attach,将没有任何作用,即使你采用另一个CChartWnd变量也不行。

下面再看看在对话框窗口里面的应用。

建立一个基于对话框的MFC程序LessonA11_1。

在主对话框上放置两个Picture控件,ID分别为IDC_CHART1和IDC_CHART2。

添加头文件和库文件的包含。

在CLessonA11_1Dlg类里面添加一个成员变量。

CChartWnd m_ChartWnd;

在CLessonA11_1Dlg类的OnInitDialog函数里面,添加代码如下。

// TODO: Add extra initialization here
	m_ChartWnd.Attach(m_hWnd, IDC_CHART1, kTypeXY);
	m_ChartWnd.Attach(m_hWnd, IDC_CHART2, kTypeXY);

	m_ChartWnd.GetChart(0)->AddPoint2D(0.0, 0.0);
	m_ChartWnd.GetChart(0)->AddPoint2D(1.0, 1.0);
	m_ChartWnd.GetChart(0)->AddPoint2D(2.0, 1.0);
	m_ChartWnd.GetChart(0)->AddPoint2D(3.0, 0.0);
	m_ChartWnd.GetChart(0)->SetBkgndColor(RGB(200, 200, 200));

	m_ChartWnd.GetChart(1)->AddPoint2D(0.0, 1.0);
	m_ChartWnd.GetChart(1)->AddPoint2D(1.0, 0.0);
	m_ChartWnd.GetChart(1)->AddPoint2D(2.0, 0.0);
	m_ChartWnd.GetChart(1)->AddPoint2D(3.0, 1.0);
	m_ChartWnd.GetChart(1)->SetBkgndColor(RGB(200, 255, 255));

运行结果如下。

技术分享

OK,Bye!

版权声明:本文为博主原创文章,未经博主允许不得转载。

深入浅出CChart 每日一课——快乐高四第十一课 不离不弃,利用CChartWnd实现多区域绘图

标签:cchart   多区域绘图   

原文地址:http://blog.csdn.net/benbenlixin/article/details/48062835

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!