首先我们先上效果图,如果你需要这样的Demo请点击此处下载:High-speed Charting Control--MFC绘图Demo

在开始之前,我们首先推荐一篇博客,该博客主要对该控件的英文开发文档进行了翻译,如果各位需要进一步开发该控件的其他功能可以详细阅读该博客或官方文档:High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件

接下来是该控件的下载地址:

免费官方下载地址(需要注册下载,页面有时会打不开):https://www.codeproject.com/Articles/14075/High-speed-Charting-Control

CSDN下载地址(需要积分):https://download.csdn.net/download/qq_15029743/10956256

好了,接下来正式介绍我们是如何画图的:

Step1:建立一个新的MFC工程文件,并将下载的控件的源文件(CSDN下载中的ChartCtrl_source.zip文件)解压放到MFC工程目录下:

Step2:导入控件类:

Step3:程序界面拖入控件:

选中拖入的自定义控件并更改属性,这里要改的属性有Style,就在5右边的0改为2,0x52010000,Class命名为ChartCtrl,ID我们可以自定义(这里就使用默认的IDC_CUSTOM1):

Step4: 添加头文件,在对话框类的头文件中把控件包含进来,具体代码及实现效果如下如下:

#include "ChartCtrl/ChartCtrl.h"

Step5: 创建控件的成员变量:

CChartCtrl m_ChartCtrl1;  //这里的成员变量名称根据实际需要命名即可

关联控件的成员变量和ID:

DDX_Control(pDX, IDC_CUSTOM1, m_ChartCtrl1);

此时,我们编译运行,控件就显示出来了:

Step6: 为控件添加坐标轴:

CChartAxis *pAxis = NULL;
pAxis = m_ChartCtrl1.CreateStandardAxis(CChartCtrl::BottomAxis);
pAxis->SetAutomatic(true);
pAxis = m_ChartCtrl1.CreateStandardAxis(CChartCtrl::LeftAxis);
pAxis->SetAutomatic(true);

Step7:创建标题

首先导入标题类的头文件:

#include "ChartCtrl\ChartTitle.h"  //标题头文件

代码实现:

TChartString str1;
str1 = _T("High-speed Charting画图Demo");
m_ChartCtrl1.GetTitle()->AddString(str1);

Step8:一些外观上的设计(通常白底绘图看久了比较累,我们这里进行一些颜色的改变)

m_ChartCtrl.GetTitle()->SetColor(RGB(255, 255, 255));   //标题字体白色m_ChartCtrl.GetLeftAxis()->SetTextColor(RGB(255, 255, 255));  //左坐标轴白色m_ChartCtrl.GetBottomAxis()->SetTextColor(RGB(255, 255, 255));  //底部坐标轴白色m_ChartCtrl.SetBorderColor(RGB(255, 255, 255));  //边框颜色白色m_ChartCtrl.SetBackColor(RGB(85, 85, 85));  //背景颜色深灰色

修改之后看起来舒服多了,不扎眼了:

Step9:画线

先导入画线的头文件:

#include "ChartCtrl\ChartLineSerie.h"  //画线头文件

代码实现:这里我们把代码添加到一个按钮响应里(按钮画图):

这里我们画一条过原点的直线,代码如下:

double X1Values[10], Y1Values[10];for (int i = 0; i<10; i++){X1Values[i] = i;Y1Values[i] = i;}CChartLineSerie *pLineSerie2;m_ChartCtrl1.SetZoomEnabled(true);m_ChartCtrl1.RemoveAllSeries();//先清空pLineSerie2 = m_ChartCtrl1.CreateLineSerie();pLineSerie2->SetSeriesOrdering(poNoOrdering);//设置为无序pLineSerie2->SetPoints(X1Values, Y1Values, 10);

这样,我们点击之后就可以画出一条直线了:

Step10:添加鼠标响应,很多时候我们需要知道绘图控件中的某个点的具体坐标,这时候我们可以通过添加十字光标来实现

添加鼠标响应头文件:

#include "ChartCtrl\ChartMouseListener.h"  //鼠标响应头文件

定义两个全局变量来存储坐标:

double x, y;

添加一个自定义消息来传递坐标:

点击编辑代码,然后我们来写处理代码:

CString s;s.Format(_T("x = %.2f,y = %.2f"), x, y);CStatic* pStatic;pStatic = (CStatic*)GetDlgItem(IDC_STATIC);pStatic->SetWindowText(s);return 1;

这里的IDC_STATIC是我们提前准备的一个静态文本框,用于显示坐标信息

这里我们还需要定义一下消息:

#define MESSAGE_UPDATEPOS WM_USER+1001

加下来我们用代码实现派生类:

class CCustomCursorListener : public CChartCursorListener
{
public:void OnCursorMoved(CChartCursor *pCursor, double xValue, double yValue){x = xValue;y = yValue;SendMessage(m_hwnd, MESSAGE_UPDATEPOS, 0, 0);// Do something with the string...}void GetHwnd(HWND hwnd){m_hwnd = hwnd;}HWND m_hwnd;
};

最后,我们在按钮下添加实现代码:

    CCustomCursorListener* m_pCursorListener;CChartCrossHairCursor* pCrossHair =m_ChartCtrl1.CreateCrossHairCursor();HWND hWnd = this->GetSafeHwnd();m_pCursorListener = new CCustomCursorListener;m_pCursorListener->GetHwnd(hWnd);pCrossHair->RegisterListener(m_pCursorListener);

至此,我们完成了整个Demo,点击画图即可获得博客开头的效果:

High-speed Charting Control(MFC绘图控件)--MFC绘图Demo(包含鼠标响应)相关推荐

  1. MFC之图像绘制---高速绘图控件(High-speed Charting Control)应用(一)

    High-speed Charting Control的下载.配置及创建 一.介绍 必须吹一波这个大佬,我觉得这个可能是MFC中最好用的绘图控件了,相关下载链接如下: 官方下载地址https://ww ...

  2. MFC之图像绘制---高速绘图控件(High-speed Charting Control)应用(二)

    High-speed Charting Control静态绘图 在写之前必须推荐一篇文章,我也是跟着这位大佬学习的,点击这里进去查看 一.建立坐标轴 ChartCtrl一共有3种坐标,分别是数值型(C ...

  3. TeeChart替代品,MFC下好用的高速绘图控件-(Hight-Speed Charting)

    相关链接: C++ GUI 绘图控件目录 MFC VS2010 使用TeeChart绘图控件 - 之一 - 控件和类的导入 VS2010 使用TeeChart绘图控件 - 之二 - 绘制图形(折线图, ...

  4. 基于MFC串口编程和曲线图绘制(visual studio2008,Teechart绘图控件)的程序总结

    前言 今年刚进入公司按经理的要求为底盘测控机写了一个小小的console.这也是第一次教认真的完成整个程序的编写.程序不大,所用技术比较基础也不前卫,属于初级程序员的练手程序(知识的整理和搬运).虽然 ...

  5. MFC high-speed-charting控件使用(添加垂直游标,两个控件的联动)

    MFC high-speed-charting控件使用(添加垂直游标,两个控件的联动) 应用场景 最近参与的一个项目中涉及到在一个对话框中添加两个high-speed-charting控件,在两个控件 ...

  6. VC 在CStatic控件上绘图

    最近用MFC写一个程序,想在CStatic上绘制图片,一开始以为很简单,直接获取CStatic控件的DC绘图就是了,按照这个思路,编写函数,调用执行,结果大失所望,CStatic控件无动于衷,根本看不 ...

  7. MFC Edit控件 error:“DDX_Control”: 不能将参数 3 从“int”转换为“CWnd ”

    在使用MFC的Edit Control等控件时可能你会遇到这样的问题:error:"DDX_Control": 不能将参数 3 从"int"转换为"C ...

  8. 为子控件添加自定义绘图方式

    在MFC应用程序中,有时会遇到需要让指定的控件实现自绘.但是看该控件的事件,没有一个像是能承担这种责任的. 我们都知道控件也是窗口,也都有消息循环.所以: 方案一:写个新类,继承自某个窗口类,在它的W ...

  9. mfc随记:基于vs2010创建MFC ActiveX控件并测试

    一.新建一个空项目 以管理员打开vs2010,选择新建一个mfc activeX控件,填写项目名称和路径,其他无需修改,直接默认一直下一步即可 二. 添加测试方法 在底部tab栏切换到类视图,右键添加 ...

最新文章

  1. 基于HT for Web 3D呈现Box2DJS物理引擎
  2. R语言应用实战-OLS模型算法原理及应用示例
  3. springboot---成员初始化顺序
  4. 《sql语句练习1》
  5. tar (child): .tgz\r:无法 open: 没有那个文件或目录
  6. 计算机一级的复习,【计算机一级】计算机一级考试复习资料
  7. LuaForUnity7.1:Lua“类与对象”
  8. jfinal-mailer一款支持线程池的异步邮件,可以使用freemarker作为模板的邮件插件...
  9. 【0x50「动态规划」例题】LCIS【最长公共上升子序列】
  10. 国内外各大免费搜索引擎、导航网址提交入口
  11. 软件系统服务器端要求用千兆宽带,【硬核分享】升级千兆网络而速度却达不到?这些操作你做对了吗?...
  12. 警示灯emark认证需要什么条件?
  13. 深度学习词汇表(一)
  14. java noi和io
  15. CPU 上下文切换是什么意思?(下)
  16. FPGA基础入门【1】Vivado官方免费版安装
  17. HTML5七夕情人节表白网页(新年倒计时-红色雪花) HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码 css爱
  18. 免费使用的pdf转cad软件使用
  19. mssql2000分页查询
  20. 2 应用层 - 应用层协议原理

热门文章

  1. (转)《浪潮之巅》作者吴军前言:有幸见证历史(内有目录和作者简介)
  2. GitHub push的时候报:Unable to access ‘https://github.com/xxxx/xxxx.git/‘:OpenSSL SSL_read:Connection was
  3. 3D模型欣赏:《死亡搁浅》角色Porter 次世代 现实主义 【3D游戏建模教程】
  4. “注水”的新力与“错付”的陈凯
  5. 唐骏解禁回IT:十年之内不跳槽
  6. 铁甲雄兵显示服务器维护,铁甲雄兵正在获取服务器地址
  7. cv2.VideoCapture(0)
  8. 2020写给未来 100w 粉丝的年终总结
  9. 禁用格式工厂的Bright Data
  10. 微信备份到云服务器失败怎么回事,icloud云备份失败怎么办 icloud云备份失败原因及解决方法...