AdvPlot的简单使用以及ON_MESSAGE的自定义使用

server/2024/12/21 5:56:54/

AdvPlot 函数用于在指定的设备上下文中绘制一个高级图形。
首先要在项目中添加对应的AdvPlot头文件以及源文件,然后

AdvPlot m_Plot;//创建对象
m_Plot.SubclassDlgItem(IDC_PLOT,this);//在初始化对话框中将画波形的对象与界面上的CustomCtrl控件名连接起来
m_Plot.SetGrid(GRID,RGB(64,96,64),PS_SOLID);//设置网格
m_Plot.SetbgColor(RGB(0,0,0));//设置背景黑色
m_Plot.SetTopTitle(_T("波形"));
m_Plot.SetYLeftDanwei(_T("100mV/格"));//设置Y左侧轴的单位显示标签
m_Plot.SetYRightDanwei(_T("100mV/格"));
m_Plot.SetYAxisDanweiFontHeight(20);//设置Y轴字体最大为20
m_Plot.SetTimeTitleFontHeight(20);
m_Plot.SetYLeftRange(-5000,5000,false);//设置Y轴左侧范围,布尔变量为true时表示重绘更新
m_Plot.SetYRightRange(-5000,5000,false);//设置Y轴右侧范围
m_Plot.SetTimeAxisRange(0,100000000,false,false);//设置时间轴范围,100ms

CRoundSliderCtrl是一个自定义的圆形滑块控件,继承自CSliderCtrl,相当于一个可拖动值使波形改变位置的滑块。
新的类对象名为CVlgRoundSliderCtrl:

CVlgRoundSliderCtrl m_Slider_LeftY;
CVlgRoundSliderCtrl m_Slider_RightY;
long long int Val = m_Slider_LeftY.GetRealValue();//获取滑块的值
m_Plot.SetYLeftRange(-Val*5,Val*5,TRUE);//设置Y轴范围
LeftDisplayZoomCtrl();//自定义的左轴放大控制函数Val = m_Slider_RightY.GetRealValue();//获取滑块的值
m_Plot.SetYRightRange(-Val*5,Val*5,TRUE);//设置Y轴范围
RightDisplayZoomCtrl();//自定义的右轴放大控制函数//从设备读取电压数据并画线
int m_CapLen = 0;
double *Buff = new double[Len];//Len为消息触发采集时捕获的数据长度Len = Capture(m_CapLen,0);
Len *= 1024;//转换成长度
unsigned int BufLen = ReadVoltageDatas(Ch/*通道数*/,Buff,Len);//从设备读取电压数据,函数在VdsoLib头文件中,所以要先包含头文件和源文件,不同文件对应函数名可能不同
int OutRange = IsVoltageDatasOutRange(Ch);//判断电压数据是否超出设备测量范围,0表示未超出
bool AddLine =false;//判断是否需要在绘制波形时添加线条
if(!m_Plot.HaveLine("通道1"))
{AddLine = true;//如果此通道对应的波形无线条则需添加线条
}
else if(m_Plot.GetBufferLength("通道1")!= BufLen)
{m_Plot.DestoryLine("通道1");AddLine=true;//如果获取波形数据长度不等于读取到的数据长度,则删除已有线条
}
if(AddLine)
{lineattribute line;line.pctName = "通道1";line.clr = RGB(255,0,0);line.lr_lengend = -1;line.buf = NULL;line.length = Len;m_Plot.CreateLine(&line);
}
double TimeLen = BufLen*1000000000.0/m_sample;//将采集点换算为时间ns
m_Plot.ChangeDatas("通道1",Buff,BufLen,0,TimeLen);//将数据copy到线条数据中
m_Plot.ReDraw();//重绘
NextCapture();//进行下一次的捕获设备数据

ON_MESSAGE 是 MFC(Microsoft Foundation Classes)框架中的一个宏,用于处理自定义消息。在 MFC 中,消息通常通过消息映射(Message Map)机制进行处理,而 ON_MESSAGE 宏就是用于将自定义消息映射到相应的处理函数上。
ON_MESSAGE 宏的使用方法:
定义自定义消息:首先,你需要定义一个自定义消息。通常,自定义消息的定义是通过在应用程序的头文件中添加一个常量来实现的,这个常量的值应该大于 WM_USER(0x0400),以避免与系统定义的消息冲突。

#define WM_MY_CUSTOM_MESSAGE (WM_USER + 1)

在类的头文件中声明消息处理函数:接下来,你需要在类的头文件中声明一个消息处理函数。这个函数应该返回 LRESULT 类型,并接受两个参数:WPARAM 和 LPARAM,这两个参数用于传递消息的附加信息。

class CMyClass : public CWinApp
{
protected:afx_msg LRESULT OnMyCustomMessage(WPARAM wParam, LPARAM lParam);
};

在类的实现文件中添加消息映射:然后,在类的实现文件中,使用 BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 宏来定义消息映射。在这个映射中,你需要使用 ON_MESSAGE 宏将自定义消息映射到之前声明的处理函数上。

BEGIN_MESSAGE_MAP(CMyClass, CWinApp)ON_MESSAGE(WM_MY_CUSTOM_MESSAGE, OnMyCustomMessage)
END_MESSAGE_MAP()

实现消息处理函数:最后,你需要在类的实现文件中实现消息处理函数。这个函数将在接收到自定义消息时被调用。

LRESULT CMyClass::OnMyCustomMessage(WPARAM wParam, LPARAM lParam)
{// 处理自定义消息的代码return 0;
}

http://www.ppmy.cn/server/151878.html

相关文章

信息系统项目管理师软考学习总结——软考介绍

计算机技术与软件专业技术资格(水平)考试是原中国计算机软件专业技术资格和水平考试(简称软件考试)的完善与发展。这是由人力资源和社会保障部和工业和信息化部领导下的国家级考试,其目的是,科学、公正地对全国计算机与软件专业技术人员进行职业资格、专…

Flutter 开关属性

Switch 构造函数的样式 const Switch({Key? key,required this.value, // 当前开关的状态,布尔值(true 表示打开,false 表示关闭)required this.onChanged, // 状态切换时的回调函数,执行您定义的逻…

裸金属服务器和传统服务器的区别

本文将来探讨一下裸金属服务器与传统服务器两者之间的区别,并且讲解一下裸金属服务器和传统服务器各自的优势都有哪些! 首先,裸金属服务器是一种没有虚拟化层的服务器架构,用户能够直接访问和管理服务器的物理资源;而传…

道路运输企业安全生产管理人员安全考核试题

道路运输企业安全生产管理人员安全考核试题 一、单选题 题干:在公交车行驶过程中,乘客王某因与驾驶员发生矛盾,遂殴打驾驶员并抢夺方向盘,造成其他乘客受轻微伤,依照《中华人民共和国刑法》的规定,王某触…

ffmpeg使用方法

1.转换视频格式 cmd 打开视频所在目录 输入命令 ffmpeg -i 111.mp4 111.webm 前为原视频名字 后为目标格式视频名称 2.压缩图片 2-1 调整图片质量 ffmpeg -i input.jpg -q:v 5 output.jpg q:v的值范围从1(最佳质量)到31(最差质量&…

复习打卡大数据篇——Hadoop HDFS 02

目录 1. HDFS辅助工具 2. namenode安全模式 1. HDFS辅助工具 跨集群数据拷贝 当我们需要跨集群进行文件数据的拷贝时可以用: hadoop distcp 集群1的某个文件路径 要拷贝到集群2的地址路径 文件归档工具archive 由于HDFS的块的数量取决于文件的大小和数量&…

基于微信小程序的小区疫情防控ssm+论文源码调试讲解

第2章 程序开发技术 2.1 Mysql数据库 为了更容易理解Mysql数据库,接下来就对其具备的主要特征进行描述。 (1)首选Mysql数据库也是为了节省开发资金,因为网络上对Mysql的源码都已进行了公开展示,开发者根据程序开发需…

Linux进行概念--进程的基本概念与基本操作

根据上一篇内容,在还没有学习进程之前,就问一下,操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再把进程组织起来。 那什么是进程呢?这里就先简单了解一些。 基本概念与基本操作…