上节课笨笨给大家介绍了CChart在微软MFC框架下的应用,本节课的内容仍然和百年老店微软相关,只不过主角换成WTL了。

不了解WTL的同学可以先找度娘温习一下。度娘在怀,今生何求。郎君啊,你是不是闷得慌,如果你闷得慌给我十娘讲,十娘我为你解忧伤。哦,对不起,笨笨刚才走神了,把度娘当成杜十娘了。

要在WTL下使用CChart,当然首先需要安装WTL。由于笨笨使用的是VC6,笨笨下载的是WTL8.0,并下载了WTL7.1用于辅助安装,具体的方法还得找度娘。

如果同学们使用高版本VC,可以下载WTL8.5。

现在我们开始。

第一步,用VC建立一个基于ATL/WTL Wizard向导的程序,名为Lesson16。在余下的向导步骤中选择默认值,不做任何修改。

第二步,拷贝五个库文件到Lesson16文件夹。

第三步,在VC中打开Lesson16View.h文件,在其头部添加如下代码。

#include "Chart.h"
#ifdef _DEBUG
#pragma comment(lib, "PlotDll_d.lib")
#else
#pragma comment(lib, "PlotDll.lib")
#endif

第四步,在Lesson16View.h文件里面,为CLesson16View类添加一个CChartWnd类型的成员变量。

CChartWnd	m_ChartWnd;

第五步,找到Lesson16View.h中如下代码。

BEGIN_MSG_MAP(CLesson16View)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
END_MSG_MAP()

修改成下面这样。

BEGIN_MSG_MAP(CLesson16View)
//MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
END_MSG_MAP()

这就是WTL的消息响应,呵呵。

第六步,找到Lesson16View.h中如下代码,删除掉或者屏蔽掉它。

LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
CPaintDC dc(m_hWnd); //TODO: Add your drawing code here return 0;
}

第七步,在Lesson16View.h中加入如下代码。

LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
double *pX, *pY;
int i; if(m_ChartWnd.Attach(m_hWnd, kTypeXY))
{
pX=new double[200];
pY=new double[200];
for(i=0; i<200; i++)
{
pX[i]=(i-100.0)/100.0;
pY[i]=pX[i]*pX[i];
}
m_ChartWnd.GetChart()->AddCurve(pX, pY, 200);
delete []pY;
delete []pX;
m_ChartWnd.GetChart()->SetTitle(_TEXT("在WTL框架中测试CChart")); }
return 0;
}
LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
m_ChartWnd.Detach();
return 0;
}

完成了!编译并运行程序,效果如图。

在WTL中编程总的感觉和用Win32 Application向导差不多,同学们觉得呢?

上面笨笨采用的是CChartWnd类编程,同学们可以试着改用CChart类完成。

深入浅出CChart 每日一课——第十六课 实习之旅,百年老店之新锐WTL的更多相关文章

  1. vue.js 第十课-第十六课

    第十课: http://note.youdao.com/noteshare?id=25b5ba45286464856f21eb4b6b391ecd&sub=19C4429995384F72BD ...

  2. NeHe OpenGL教程 第四十六课:全屏反走样

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击

    Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击 文/玄魂 目录 Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击................... ...

  4. NeHe OpenGL教程 第三十六课:从渲染到纹理

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. NeHe OpenGL教程 第二十六课:反射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. NeHe OpenGL教程 第十六课:雾

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. webgl(three.js)3D光伏,3D太阳能能源,3D智慧光伏、光伏发电、清洁能源三维可视化解决方案——第十六课

    序: 能源是文明和发展的重要保障,人类命运不可避开的话题,无论是战争还是发展,都有它存在的身影.从石器时代到现代文明,人类的能源应用在进步,也在面临能源枯竭的危机与恐惧,而开发与应用可再生能源才是解决 ...

  8. 深入浅出CChart 每日一课——第十八课 女神的套娃,玩转对话框

    前面笨笨已经给大家展示了CChart编程的N个例子.这些例子中,我们的CChart图像都是绘制在程序的主窗口中的. 在很多情况下,我们面对的情形不是这样的.这节课笨笨就给大家介绍一下怎样在对话框中用C ...

  9. 深入浅出CChart 每日一课——快乐高四第六课 二丫的青梅,返璞归真之普通窗体多区域画图

    有好些朋友给我反映,就是一个窗体中加入好几个CChartWnd之后.工作不正常.这个的确是这样,CChartWnd会接管原来窗体的消息循环,加入多个CChartWnd之后,就相当于出租房转手好几道,消 ...

随机推荐

  1. 【转】android 电池(一):锂电池基本原理篇

    关键词:android  电池关机充电 androidboot.mode charger 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV3 ...

  2. 【转】C/C++程序员应聘常见面试题深入剖析

    1.引言 本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵.文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见­. 许多面试题看似简单,却需要深厚的基 ...

  3. 用Robocod游戏来学习JAVA

    Robocode(用游戏来学习Java技术还是用Java来玩游戏?)用你的JAVA编程技术来玩游戏吧!不会JAVA?那就用游戏来学习JAVA吧!什么是Robocode? 其实我对机器人一直很感兴趣.我 ...

  4. ROI 脚本

    ROI: receiving open interface, 是提供给客户的接口, 通过 ROI 客户能够不通过EBS form 界面做receiving 的动作, 而是通过脚本插入相关的接口表 ( ...

  5. Android项目打包开启proguard的混淆优化带来的问题

    1.引入一个sdk以后.打包报错: [INFO] Unexpected error while evaluating instruction: [INFO]   Class       = [com/ ...

  6. sqlplus常用操作命令2

    常用编辑命令:A[ppend] text 将text附加到当前行之后C[hange] /old /new 将当前行中的old替换为newCLear] buff[er] 清除缓冲区中的所有行DEL 删除 ...

  7. C++ 实现Trim

    一.字符串去空格(没有处理字符串中间的空格) lTrim:除去字符串开头的空格 eg."    abc123    " --> "abc123    " ...

  8. SonarQube 项目配置文件

    费话不说,直接上代码: 需要注意的地方: 1. 每个项目的key不能重复. 2. 注意编码方式. 3. 注意分模块的写法. 4. 忽略源码文件的写法. # Required metadatasonar ...

  9. Word Search II

    Given a 2D board and a list of words from the dictionary, find all words in the board. Each word mus ...

  10. [Effective C++系列]-为多态基类声明Virtual析构函数

    Declare destructors virtual in polymorphic base classes.   [原理] C++指出,当derived class对象经由一个由base clas ...