深入浅出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的后面,看是否起作用。
标签:CChart,函数,返璞归真,int,hWnd,画图,高四,控制台 来源: https://blog.csdn.net/baita96/article/details/89735303