深入浅出CChart 每日一课——快乐高四第三十三课 叶落归根,返璞归真之控制台程序

什么?控制台里面还能画图?

当然了,控制台里完全能画图!当年,同宿舍一位兄弟,利用TC2.0编制了一个图形界面的俄罗斯方块游戏,哥是佩服得不得了。什么,TC2.0?笨笨又暴露年龄了,哈哈。

现在都进入9102年了,还怎么能用控制台画图这种费力不讨好的技术呢!这节课要介绍的,是在控制台里调用CChart画图,而不是在控制台里直接画图。

这有什么用呢?有些简单的计算利用控制台程序就可以完成了,用不着复杂的GUI程序。但计算结束后,在控制台里面很难实现数据的可视化。一般采用的方式是保存到数据文件,然后用Origin、Excel等专业的可视化软件来画图。但这个过程毕竟比较繁琐。

那有没有好用一点的方案?当然有!想想Matlab的工作方式,计算结束后,Plot命令可以弹出一个窗口,用于数据的显示。现在有了CChart,控制台程序也可以这样干。

控制台下使用CChart的方法是ChartCtrl标准控件模式。

CChar支持控制台窗口的函数主要是三个,这三个函数都是全局函数,不属于任何类。

HWND	CreatePopupChartWnd(HWND hWndParent, int nChartType, TCHAR *wndTitle, int x=0, int y=0, int cx=CW_USEDEFAULT, int cy=CW_USEDEFAULT);

这个函数是Windows API中CreateWindow的一个简单包装,实际上是建立了一个窗口类名为“ChartCtrl”的窗口。

实际上直接用CreateWindow也是可以的。

CChart	*GetChart(HWND hWnd);

如果hWnd的窗口类名为“ChartCtrl”,这个函数将返回一个CChart指针,否则返回NULL。

有了CChart指针,一切都好办了。

int		SimpleMsgLoop();

这个函数是建立一个消息循环。在控制台程序里没有消息循环,窗口可以显示,但会卡死,需要建立消息循环。在窗口程序里,这个函数就不需要了。

需要注意的是,这个函数一般不会返回,而是一个死循环,除非窗口退出。因此,这个函数需要放置在控制台程序的最后,如果后面还有代码,一般不会执行。

好了,基础知识介绍结束,现在可以上例子了。例子非常简单。

第一步,用VC建立一个Win32 Console Application,名字为LessonA33,选择An empty project。

第二步,拷贝库文件到LessonA33文件夹。

第三步,建立一个cpp文件,并添加到项目里面。Cpp文件内容如下。

#include <math.h>

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

int main(int argc, char* argv[])
{
	const double Pi = 3.1415926536;
	const int len = 360;
	double pX[len], pY[len];
	int i;
	for(i=0; i<len; i++)
	{
		pX[i] = i;
		pY[i] = 5.0*sin(3.0*i*2.0*Pi/len);
	}
	HWND hWnd = CreatePopupChartWnd(NULL, kTypeXY, _T("Title"));
	GetChart(hWnd)->AddCurve(pX, pY, len);
	GetChart(hWnd)->SetTitle(_T("Console Application"));
	GetChart(hWnd)->OnDraw(hWnd);

	//需要建立消息循环,不然界面卡死
	SimpleMsgLoop();

	return 0;
}

程序比较简单,相关问题前面已经做了讲解。

效果如图。

同学们可以试试不加SimpleMsgLoop()的效果,也可以放一些语句到SimpleMsgLoop的后面,看是否起作用。

猜你喜欢

转载自blog.csdn.net/baita96/article/details/89735303
今日推荐