MFC绘图工具High-speed Charting Control(VS2019)

标题:关于high-speed Charting Control配置过程中一些问题(ChartCtrl新手向)vs2019+win10
最近要搞一个MFC画折线图的程序,网上看到一个人人推荐的插件,还可以用于商业,于是学习ing。本片主要介绍配置方法和配置中的一些问题。详细配置方法可以看大佬图文教程,这里就不喧宾夺主了,草草介绍。

注意事项
1.源文件包括头文件和cpp文件均在source文件中,想要自己编写画图,可以不用下载demo和说明文件,因为用处真的不大。
2.部分版本的source编译后还存在一个问题,函数声明不一致。我忘了是哪个函数了,解决办法是再cpp文件中把函数参数类型size_t改为unsigned,这样就和.h文件一致,没有问题了。
3.目前大部分使用较低版本的vs,按照大佬的教程不会有任何问题。由于本人使用vs2019,在某些地方需要修改。

下面介绍下我配置过程
(1)文件下载,建议GitHub下载,不收费。链接https://github.com/HongXG/ChartCtrl
(2)新建一个基于对话框的MFC应用,(建议起一个好找的名字,因为源文件很多),新建一个筛选器,命名为ChartCtrl,右键,添加新建项,选中source中文件。
(3)在工具箱中找到Custom Control,拖拽一个到界面,修改style为0x52010000,类为ChartCtrl。
(4)给刚拖拽的Custom Control控件添加变量,变量名m_chartctrl,变量类型CChartCtrl。
(5)在dlg.h中添加
#include"ChartCtrl/ChartCtrl.h"
在dlg.cpp中添加如下
#include “ChartCtrl/ChartCtrl.h”
(6)运行,报错,*是否忘记添加pch.h
由于高版本vs使用pch代替stdafx做编译头,而high-speed Charting Control使用较低vs编译的,使用stdafx,因此产生不一致。
**解决方法:**打开建立的ChartCtrl筛选器,修改每个.cpp文件把#include“stdafx”改为#include“pch.h”
改完后依旧标红,提示打不开pch.h。莫慌,只是编译器没反应过来,运行并不会报错。
(7)再次运行,没有错误,并且不会闪退,正常显示画图框,即为配置完成。

一、High-speed Charting Control
1.1 下载
 

1.2 添加到项目中
首先将资源中的Chart_source复制到工程文件夹中(可能不同的资源里面名字不一样,这个文件就是该工具分装好的头文件和源文件)

然后在工程中:项目-添加现有项-Chart_source文件夹全选添加

至此,已经完成了将资源添加进项目工程中

二、绘图测试
2.1 添加控件
High-speed Charting Control是基于Custom Control控件绘制,添加该控件后需要修改属性,主要有两处
(1)样式
  将默认的0x50010000修改为0x52010000
(2)类
  修改为ChartCtrl

2.2 编写程序

(1)在项目头文件(xxxDlg.h)中添加需要使用的库

#include "ChartCtrl_source\ChartCtrl.h"		//曲线基本设置头文件
#include "ChartCtrl_source\ChartTitle.h"	//曲线标题设置头文件
#include "ChartCtrl_source\ChartBarSerie.h"		//柱状图头文件

// MyChartDlg.h: 头文件
//

2)在项目源文件(xxxDlg.cpp)中添加变量并绑定控件
  注意绑定控件要在对话框类下的DoDataExchange中,不然无法显示

在xxxDlg.h的xxDlg中声明成员变量

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

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

在xxxDlg.cpp

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

void CMyChartDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_CUSTOM1, m_ChartCtrl);
}

(3)初始化坐标轴以及标题

BOOL CMyChartDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != nullptr)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	// 
	//初始化坐标轴
	CChartAxis* pAxis = NULL;
	pAxis = m_ChartCtrl.CreateStandardAxis(CChartCtrl::BottomAxis);	//底部坐标轴
	//pAxis->SetAutomatic(true);	
	//根据具体数值自动调节坐标轴坐标,如果要固定坐标轴需要将其参数修改为false
	pAxis->SetAutomatic(false);
	pAxis->SetMinMax(0, 20);	//固定x轴坐标为0-20
	pAxis = m_ChartCtrl.CreateStandardAxis(CChartCtrl::LeftAxis);	//左边坐标轴
	pAxis->SetAutomatic(false);
	pAxis->SetMinMax(0, 100);	//固定y轴坐标为0-100

	//添加标题
	TChartString str1;
	str1 = _T("High-speed Charting画图Demo");
	m_ChartCtrl.GetTitle()->AddString(str1);

	//设置颜色
	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));  //背景颜色深灰色

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

(4)绘制曲线
添加Button控件来启动定时器,定时器到时会自动更新绘图,参数给随机数
其中添加定时器的方法为:类向导-消息-添加WM_TIMER

//点击按钮启动定时器
void CMyChartDlg::OnBnClickedTimerStart()
{
	// TODO: 在此添加控件通知处理程序代码
	SetTimer(1, 1000, NULL);	//启动定时器1,计时1s
}


//定时器到时自动执行
void CMyChartDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	switch (nIDEvent)
	{
	case 1:	//定时器1到时
	{
		srand((unsigned int)time(NULL));	//产生随机数种子,包含头文件#include<ctime>

		double X1Values[15], Y1Values[15];
		for (int i = 0; i < 15; i++)
		{
			X1Values[i] = i;
			Y1Values[i] = rand() % 100 + 1;	//y坐标随机产生1~100
		}

		CChartBarSerie* pBarSerie3;	//定义柱状图句柄

		m_ChartCtrl.SetZoomEnabled(true);
		m_ChartCtrl.RemoveAllSeries();//先清空

		pBarSerie3 = m_ChartCtrl.CreateBarSerie();	//绑定绘图变量
		pBarSerie3->SetSeriesOrdering(poNoOrdering);//设置为无序
		pBarSerie3->SetPoints(X1Values, Y1Values, 15);
	}
		break;
	default:
		break;
	}

	CDialogEx::OnTimer(nIDEvent);
}

2.3 测试程序

(1)执行时会报错

这是因为VS2019做了优化,标准头文件从stdafx.h变为了pch.h,将High-speed Charting Control中.cpp的源文件的库文件修改过来即可
 

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MFC绘图控件是Microsoft Foundation Class库中的一个工具,它可以用来进行高速图表绘制。该控件具有快速绘图的能力,可以实时更新,并且支持鼠标响应。 MFC绘图控件可以通过MFC绘图示例(MFC Drawing Demo)来演示。该示例程序提供了一个基础的绘图框架,通过这个框架可以创建和绘制各种图形,如直线、矩形、圆等。使用示例程序可以学习和了解MFC绘图控件的基本用法和功能。 在示例程序中,鼠标响应是一个重要的功能。通过对鼠标事件的处理,可以实现一些交互式的操作,比如绘制自由曲线、移动和编辑已有图形等。例如,可以通过鼠标左键点击来创建一个点,通过拖动鼠标可以绘制直线或矩形等。 MFC绘图控件的高速性是其突出的特点之一。在图表绘制中,通常需要频繁地进行绘制操作,如果绘制速度太慢,会导致界面卡顿,影响用户体验。而MFC绘图控件通过利用底层硬件加速和绘图缓冲等技术,可以快速地进行图表绘制,保证了绘制效率和流畅度。 总而言之,MFC绘图控件是一个功能强大的工具,可以用于高速图表绘制。通过鼠标响应,可以实现更多的交互式操作。示例程序提供了一个演示和学习的平台,用户可以深入了解和使用MFC绘图控件的各种功能。 ### 回答2: high-speed charting controlMFC绘图控件)是一种用于在MFC应用程序中绘制快速和高效图表的控件。该控件的作用是帮助开发者在应用程序中实现各种类型的图表,如折线图、柱状图、饼图等。通过使用这个控件,开发者可以轻松地创建具有交互性和响应式的图表。 MFC绘图demo是一个包含了鼠标响应功能的示例程序。该示例程序展示了如何使用high-speed charting control控件来创建图表,并在用户与图表交互时响应鼠标的操作。 在这个demo中,开发者可以看到如何通过添加数据点来绘制折线图。通过鼠标的点击和拖动,用户可以添加、删除和移动数据点,实时更新图表的显示。该demo还演示了如何通过鼠标的滚动来放大和缩小图表的显示范围。 除了基本的绘制功能,MFC绘图demo还提供了一些其他功能,如图表的标注、背景设置和图表的保存与导入等。这些功能使得开发者可以根据实际需要进行图表的定制和扩展。 总结起来,high-speed charting control(MFC绘图控件)以及包含鼠标响应的MFC绘图demo是一种帮助开发者快速绘制高效图表的控件和示例程序。开发者可以根据自己的需求,使用这个控件和示例程序来实现各种类型的交互式图表功能。 ### 回答3: 高速绘图控件是MFC(Microsoft Foundation Classes)框架中的一个重要的组件之一,它可以用于在应用程序中实现图表的绘制和展示。MFC绘图Demo是一个示例程序,展示了如何使用MFC绘图控件来实现图表绘制,并通过鼠标响应来交互操作。 MFC绘图控件使用了高效的绘图算法,能够快速地绘制图表数据,并具有良好的性能。它支持多种类型的图表,如曲线图、柱状图、饼状图等,并提供了丰富的参数和选项,可以用于定制图表的外观和行为。 MFC绘图Demo通过鼠标响应实现了图表的交互操作。用户可以使用鼠标来选择图表中的数据点、拖动图表的视图、放大缩小图表等。通过鼠标操作,用户可以方便地查看和分析图表数据,实现更直观的数据展示和操作。 在MFC绘图Demo中,通过监听鼠标事件,获取鼠标的坐标信息,并根据鼠标的操作来改变图表的显示和行为。例如,当用户点击某个数据点时,可以在图表上显示该数据点的数值或详细信息;当用户拖动图表视图时,可以实现平移图表的功能;当用户使用滚轮滚动鼠标时,可以实现图表的放大缩小。 总之,MFC高速绘图控件和MFC绘图Demo是用于实现图表绘制和交互操作的工具和示例程序,它们可以帮助开发人员快速构建和定制图表功能,并提供高效的数据展示和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值