深入浅出CChart 每日一课——快乐高四第二十一课 溪上青青草,田园风光之C风格代码

这里的C风格代码,指的是没有类的代码,并不是真正的C语言代码。

C风格代码有啥用呢?其实,并没有什么卵用。但有些地方还是可以用一下,比如,笨笨通过C风格代码,把C++编写的CChart移植到了C#下面。

C风格代码怎么写呢?注意到了吗,笨笨发布的所有版本里面,都带有两个头文件。一个是CChart.h,大家一直用的都是它;另一个呢,是Classless.h,这个就是为C风格代码准备的。

看看Classless.h就明白了,里面全部是函数定义。

这些函数分两类。

一类函数的名字和CChartWnd类的成员函数完全一样,参数也一样。例如,int Attach(HWND hWnd); 这个函数完全和int CChartWnd::Attach(HWND hWnd); 对应,但是,调用这个函数不需要前缀,直接用就行了。

另一类函数的名字和CChart类的成员函数完全一样,参数也一样。例如,int AddCurve(double *pX, double *pY, int nLen); 这个函数完全和 int CChart:: AddCurve(double *pX, double *pY, int nLen); 对应。

这是怎么实现的呢?

实际上非常简单。这里有一个CChartWnd类型的全局指针变量CChartWnd *pGlobalChartWnd,所有操作均针对这个全局变量进行。

和CChartWnd类成员函数对应的函数,例如void ReDraw(); 实际上就是调用pGlobalChartWnd->ReDraw()。

和CChart类成员函数对应的函数,例如void OnDraw(); 实际上就是调用pGlobalChartWnd->GetChart()->OnDraw()。

还有一点需要说明,由于pGlobalChartWnd这个全局变量是一个指针,笨笨提供了CreateChart()和DestroyChart()两个函数,实现pGlobalChartWnd这个指针的new和delete。

另外,Classless.h里面使用了命名空间Classless。

下面用一个实例来说明。

第一步,仿照第一课建立一个Win32 Application,名字为LessonA21。拷贝库文件。

第二步,添加头文件和库文件的引用。

#include "Classless.h"
#if defined(_UNICODE) || defined(UNICODE)
#	pragma comment(lib,"CChartu.lib")
#else
#	pragma comment(lib,"CChart.lib")
#endif
using namespace Classless;

注意这里头文件和命名空间的名字。

第三步,响应鼠标右键。

wcex.style			= CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;

第四步,在WM_CREATE消息例程里面添加绘图相关代码。

case WM_CREATE:
	CreateChart();
	Attach(hWnd);
	int i;
	for(i=0; i<100; i++)
	{
		AddPoint2D(i, (i-50.0)*(i-50.0));
	}
	SetDataLineSize(4, 0);
	SetTitle(_T("C风格代码"));
	break;

第五步,在WM_DESTROY消息例程里面添加代码。

DestroyChart();

好了,效果如图。

这节课非常简单,是吧?

猜你喜欢

转载自blog.csdn.net/baita96/article/details/89265536