深入浅出CChart 每日一课――第十课 分裂视图,锤子肖哥之错位人格

从这节课开始,笨笨给大家介绍几种CChart支持的复杂视图。

本节课首先介绍分裂视图。

这里的分裂当然不是湾湾阿扁搞的分裂。所谓分裂视图,也就是分区视图,就是把绘图区域分成几块,每一块单独绘制图形。

下面仍然以实例的方式介绍本课内容。

按照第一课的方式建立一个VC6项目,名为Lesson10。下面我们只需要关注WM_CREATE的响应例程。先如下填写。

case WM_CREATE:
	chartWnd.Attach(hWnd, kTypeSplit);
	chartWnd.GetChart()->ResizePlots(2, 2, 2);

	double pX[20], pY[20];
	int i;
	for(i=0; i<20; i++)
	{
		pX[i] = i;
		pY[i] = i;
	}
	chartWnd.GetChart()->AddCurve(pX, pY, 20, 0);
	for(i=0; i<20; i++)
	{
		pY[i] = i*i/20.0;
	}
	chartWnd.GetChart()->AddCurve(pX, pY, 20, 1);
	for(i=0; i<20; i++)
	{
		pY[i] = i*i*i/20.0/20.0;
	}
	chartWnd.GetChart()->AddCurve(pX, pY, 20, 2);
		
	break;
 

分裂视图的代号是kTypeSplit

上面代码需要重点解释的函数是ResizePlots。这个函数的定义如下。

void		ResizePlots(int mode, int nRows, int nCols);
 


此函数共有三个参数。

第一个参数mode表示分裂的模式。查看Chart.h文件头部被注释掉的代码可知:mode=0表示不分裂;mode=1表示行列分裂;mode=2表示左一右二分裂;mode=3表示左二右一分裂;mode=3表示上一下二分裂;mode=4表示上二下一分裂。

第二个参数nRows表示分裂的行数,第三个参数nCols表示分裂的列数。这两个参数只有当mode=1时候才起作用,其它时候被忽略。

上面编写的代码中进行了左一右二的视图分裂。

运行程序,效果如图。

SouthEast

果然按左一右二的方式,分区绘制了三个图形。

下面给左边的视图添加标题。在上面代码的break;的上一行,填写如下代码。

chartWnd.GetChart()->SetTitle(_T("第一个子图的标题"), 0);
 


运行效果如图。
SouthEast

下面再给整个视图添加总标题。在上一句代码的下一行,填写如下代码。

chartWnd.GetChart()->SetTitle(_T("总标题"));
 


运行效果如图。

SouthEast

分裂视图实现的交互功能中,分割线是可以拖动的,同学们可以用鼠标试试看。

下面是上图拖动后的一个结果。

SouthEast

本课的编程采用的是CChartWnd类,同学们可以试着改用CChart类实现一下。

本节课到此结束。

你可能感兴趣的:(教程,数据可视化,CChart)