人间四月天,又到毕业季。

前面这么多课程,笨笨实际上给大家介绍了CChart的多种编程模式。

第一课的编程模式是CChartWnd窗口类模式。这种模式实际是采用了Windows的窗口子类化方法,用笨笨自编的窗口函数替换了绘图窗口的窗口函数,自动处理了鼠标和键盘消息。目前,这种模式经过多次改进,已经完全消除了早期的各种局限性,是CChart默认的编程模式。

第八课的编程模式,笨笨现在称为裸模式。这种模式直接利用CChart这个类编程,需要自己处理鼠标键盘消息。当然处理过程也很简单,只需要调用一个接口函数就可以了。

第三十二课的编程模式,是ChartCtrl标准控件模式。这种模式实际上采用了Windows的窗口超类化方法,编程时新建蕴含CChart类指针的一个窗口。这种模式其实比窗口类模式更为灵活。

下面,笨笨就给大家演示一下这三种模式同时使用是一种什么感受。

需要注意的是,本节课的内容需要CChart的版本号不小于4.2.2.1。早期的版本只要启用了窗口类模式,用户代码里与CChart相关的鼠标键盘消息就被屏蔽了,按裸模式写的代码将失效。新版已经修复了这个问题。

第一步,还是老规矩,按第一课的方式建立一个Win32 Application,名字为LessonA20,拷贝头文件和库文件,增加下列代码。

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

并响应鼠标双击

wcex.style           = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;

第二步,在窗口左1/3用裸方法画一条曲线。

1)增加一个CChart变量。

static CChart chart;

2)设置一个常量,用于数组长度。

const int len=100;

3)在WM_CREATE消息里面设置曲线属性

case WM_CREATE:double pX[len], pY[len];int i; for(i=0; i<len; i++){pX[i] = i;pY[i] = i*i/(double)len/len;}chart.AddCurve(pX, pY, len);chart.SetRectConfined(true);chart.SetTitle(_T("裸模式"));break;

4)响应WM_SIZE消息,以便把曲线绘制到左1/3区域。

case WM_SIZE:RECT rect;GetClientRect(hWnd, &rect);RECT rt1;rt1 = rect;rt1.right = (2*rect.left + rect.right)/3;chart.SetConfineRect(rt1);break;

5)在WM_PAINT消息里画图。

case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: Add any drawing code here...chart.OnDraw(hWnd);EndPaint(hWnd, &ps);break;

6)响应鼠标键盘消息。

case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_LBUTTONDBLCLK:
case WM_MOUSEMOVE:
case WM_CONTEXTMENU:
case WM_KEYDOWN:chart.Interactive(hWnd, message, wParam, lParam);break;

结果如图。

第三步,在窗口中间1/3用标准控件模式画一幅等高线图。

1)增加一个CChart指针变量。

static CChart *pchart;

2)写一个等高线图的高度函数。

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

3)在WM_CREATE消息里创建一个ChartCtrl标准控件窗口。

 HWND myHWnd;myHWnd = CreateSubChartWnd(hWnd, kTypeContour, _T("Chart"), 0, 0, 600, 400);pchart = GetChart(myHWnd);pchart->SetTitle(_T("标准控件模式"));pchart->SetFieldFcn(f);pchart->SetPlotRange(-3.0, 3.0, -3.0, 3.0);

4)在WM_SIZE消息里面,让控件窗口显示在程序窗口中间1/3。

 RECT rt2;rt2 = rect;rt2.left = rt1.right;rt2.right = (rect.left+2*rect.right)/3;MoveWindow(pchart->GetWnd(), rt2.left, rt2.top, rt2.right-rt2.left, rt2.bottom-rt2.top, TRUE);

结果如图。

第四步,在窗口右边1/3用窗口类模式画一幅柱图。

1)增加一个CChartWnd指针变量。

static CChartWnd chartWnd;

2) 在WM_CREATE消息里设置相关属性。

 chartWnd.Attach(hWnd, kTypeStem);chartWnd.GetChart()->SetTitle(_T("窗口类模式"));chartWnd.GetChart()->SetRectConfined(true);double pBar[5];pBar[0] = 3;pBar[1] = 2;pBar[2] = 1;pBar[3] = 6;pBar[4] = 7;chartWnd.GetChart()->AddStems(pBar, 5);

3) 在WM_SIZE消息里面,让柱图显示在程序窗口右边1/3。

 RECT rt3;rt3 = rect;rt3.left = rt2.right;chartWnd.GetChart()->SetConfineRect(rt3);

结果如图。

三个图像的消息响应均完全正常。

啊,能同时拥有三个女朋友的感觉不错吧!哈哈。

虽然以前她们之间还有些不兼容的地方,会闹矛盾,不过笨笨已经完美地消除了这些误会,现在她们情同姐妹哟。

深入浅出CChart 每日一课——快乐高四第二十课 七月流火,总复习之CChart多种编程模式相关推荐

  1. 深入浅出CChart 每日一课——快乐高四第二十四课 武当梯云纵,移花接木之Visual Basic.Net

    既然说到了C#,那么一奶同胞的VB.Net怎么能忽略呢? Visual Basic .Net和C#的内核完全一样,都是.Net,只是外在的语言形式不一样.这种情况下,调用CChart的方法也非常类似. ...

  2. 深入浅出CChart 每日一课——快乐高四第十四课 枝头红杏,Win32标准控件ChartCtrl之围城

    本节课笨笨继续介绍ChartCtrl控件在DuiLib中的应用. 请大家先复习高四第三课. 本节课的方法和这一课的方法差不多,由于笨笨提供了ChartCtrl这个新工具,所以编程可以有一定的简化. 首 ...

  3. 深入浅出CChart 每日一课——快乐高四第五课 梦想的天空,锦上添花之客户区自绘篇

    上节课笨笨给大家介绍了CChart的插件菜单功能,这属于定制功能,给了用户发挥的自由.本节课继续介绍CChart的定制功能,这节课的内容要实用得多,因为定制的是客户区.客户区自绘功能将给您插上理想的翅 ...

  4. 深入浅出CChart 每日一课——快乐高四第五十六课 絮絮叨叨,岁月杀猪刀之FAQ

    CChart发布已有多年,QQ交流群也成立了很久.在和网友的交流中,发行了CChart的很多问题,也进行了很多改进和完善. 网友们接触CChart的时间有早有晚,不同的网友经常在群里或私聊的时候提出的 ...

  5. 深入浅出CChart 每日一课——快乐高四第五十七课 新的起点,炫彩界面库之老树新芽

    CChart对多种DirectUI库具有良好的适配性,炫彩界面库也不例外.前面已经有两篇关于炫彩界面库的课程,分别是第17课"深入浅出CChart 每日一课--第十七课 时尚加潮流,Dire ...

  6. 深入浅出CChart 每日一课——快乐高四第四十九课 旧石器时代,老血狂喷之控制台窗口绘图

    前面快乐高四第三十三课,介绍了在控制台程序中怎么利用CChart绘制曲线,那里的方法呢,很简单,就是创建一个弹出窗口,然后在这个弹出窗口上绘图,其实技术含量比较低. 这一课呢,笨笨想给大家介绍一下怎么 ...

  7. 深入浅出CChart 每日一课——快乐高四第三十课 麦正帮主,ActiveX控件巨鲸帮巨鲸岛之易语言篇

    现在呢,笨笨来揭晓上节课留下的悬念.其实笨笨想再介绍一下CChart在著名的国产语言易语言里面的应用. 下一段介绍来自百度百科. 易语言是一门以中文作为程序代码编程语言,其以"易" ...

  8. 深入浅出CChart 每日一课——快乐高四第五十课 新石器时代,轻装上阵之EasyX窗口绘图

    这一课继续介绍了在控制台程序中绘图,不过控制台窗口稍有变化,是EasyX库生成的控制台窗口. 根据EasyX官方主页的说明,EasyX 是针对 C++ 的图形库,可以帮助C/C++初学者快速上手图形和 ...

  9. 深入浅出CChart 每日一课——快乐高四第九课 于无声处,CChart内置功能介绍之数据存取篇...

    笨笨长期以来一直使用Origin软件画图和处理数据,但Origin软件没有编程语言的接口.笨笨开发CChart的一个潜在的目标.是想实现Origin软件的功能.当然这是一个不可能达到的目标.Origi ...

  10. 深入浅出CChart 每日一课——快乐高四第四十一课 投石问路,SoUI探险第一关之弹出窗口

    SoUI是什么?SoUI是启程软件(也就是黄大师个人)开发的一个C++ DirectUI库. DirectUI也是当前桌面开发的趋势和潮流,已经出现了很多商业或者开源的DirectUI库.以前的课程, ...

最新文章

  1. Docker容器对CPU资源隔离的几种方式
  2. App项目内存优化计划
  3. 健身品牌Shape获得数千万元Pre-A轮融资,清流资本领投
  4. Redis分布式锁的正确实现方式(Java版)
  5. 建筑与建筑群综合布线系统工程验收规范_GB50XXX电气施工规范
  6. VTK:绘制封顶球CappedSphere用法实战
  7. 查找三 哈希表的查找
  8. mysql boost 5.7.21_mysql 5.7.21 安装配置方法图文教程(window)
  9. skype linux 安装,Ubuntu 12.04 AMD64 安装 Skype
  10. 国家自然科学基金2020年预算减少22亿元
  11. 我是如何解决jobtracker.info could only be replicated to 0 nodes, instead of 1这个问题的
  12. python大作业数独_python做一个数独小游戏
  13. STM32嵌入式基础开发04-PS2手柄SPI通讯数据输出(4_SPI)
  14. streaming计算机技术,HTTP Live Streaming伪直播的设计与实现
  15. cisco思科 前言
  16. jquery弹出层插件jquery.ColorBox.js学习
  17. 建立时间保持时间及违例如何处理,求最大时钟频率
  18. 文本提取IP并批量自动化情报查询工具——getIpInfo
  19. 蓝鲸作业平台:搞定与脚本相关的一切
  20. 写项目时怎样将后台管理使用的富文本编辑器保存的内容转为HTML格式

热门文章

  1. word无法读取此文件,文档可能已损坏_可能的补救方法
  2. 启动计算机显示屏没反应,电脑开机后显示器无反应怎么办
  3. WinEdt 使用技巧
  4. 你中招了吗?《心理学常见误区》
  5. mysql io瓶颈_服务器IO瓶颈对MySQL性能的影响
  6. 不到一周我开发出了属于自己的知识共享平台
  7. unity游戏开发之游戏过审后 国行PS4将在3月20日发售
  8. 【秋招机试真题】华为机试0811-1-叠积木
  9. 【华为校招】【校招】【Java】叠积木
  10. python爬虫入门 之 requests 模块