Windows----虚拟仪表在VC++中的一种应用实现
2012-07-18 14:25
239 查看
虚拟仪表在VC++中的应用实现
摘 要 虚拟仪表应用越来越广泛,本文根据VC开发虚拟仪表的流程和原理,从实际应用角度设计了一个虚拟指南针仪表的实例。
关键词 虚拟仪表;VC++面向对象;动态仿真
1 引言
随着计算机技术的日益成熟,计算机的应用已渗透到各个领域,各种车载装备也逐步向数字化、智能化方向发展。用数字化的虚拟仪表取代机械式传统仪表已成为实现车辆自动化的一个重要课题。
在车辆中,驾驶员仪表面板是驾驶员获取各种工况数据的重要窗口。长期以来驾驶员仪表面板采用机械式传统仪表,这种传统仪表装置在车辆中占用了固定的空间、显示精度低、可读性差、不易扩展,而且效率十分低下。而采用虚拟仪表后,在驾驶员前方放置一台平板显示屏,为延续传统操作习惯,将原来驾驶员仪表盘的车况数据在显示屏上以模拟表形式显示,为方便读数,增加了数字表及棒图形式显示,而对越限工况及各种报警,在显示屏上以图形指示灯形式指示报警。显示屏可以在车辆不同的状态下显示不同的工况参数及报警信号,各个参数可以根据需要通过热键自由切换,采用虚拟仪表后,仪表的读数一目了然,可读性好,读数精度高,并且容易升级、扩展。因此,虚拟仪表是未来车辆的发展方向。
2 虚拟仪表控件的组成原理
仪表解决方案采用完全开放的组织架构,将仪表创建切分为:仪表盘、指针、度量刻度以及背景几个部分,这些部分既相互关联,又充分独立,当创建新的仪表的时候,可以根据需要将其进行任意组合,例如圆盘仪表盘+圆盘刻度+指针,就可以构建仪表。
框架可以由三个基础类YPaintBase,YShapeBase和YFillBase组成。其中YFillBase是填充基础类(简称“填充”),它负责对颜色、图像的填充,边框等。YShapeBase是基本图形基础类(简称“形状”),由此类派生出简单的基本图形,如:圆、三角、五角星、特殊指针样式。YPaintBase是逻辑组合基础类(简称“逻辑”),由YPaintBase把YShapeBase和YFillBase进行组合,构建出复杂图形,而复杂图形可由YPaintBase的派生类再次组合。
框架也可由函数体来完成,分别定义一些画背景、刻度、指针的函数,即可完成上述功能,本文采用第二种方式来实现仪表框架的建立。
3 应用实例
首先建立一个工程文件命名为Meter,采用对话框格式,其余选择默认选项即可。添加一个新类CMeter,里面增加如下函数体[1]:
void DrawNeedle(CDC *pDC);//画指针
void DrawMeterBackground(CDC *pDC, CRect &rect);//画仪表背景
void SetAngleRange(int nStartAngleDeg, int nEndAngle Deg); //表盘圆弧起始终止角度
void SetSubTicks(int nSubTicks); //设置每两个大刻度之间分为几个子刻度数
void SetTicks(int nTicks);//设置整个表盘分为几个大刻度数
void DrawValue(CDC *pDC);//表盘上的数值显示
void SetColorTick(BOOL bColorTick = FALSE);//设置刻度盘颜色
void SetValueDecimals(int nDecimals); // 设置数值显示精度(小数点后位数)
void SetUnits(CString &strUnits);// 设置单位
void SetScaleDecimals(int nDecimals); // 设置刻度显示精度(小数点后位数)
void SetRange(double dMin, double dMax); //设置可测量范围
void SetNeedleColor (COLORREF colorNeedle); //设置指针颜色
void UpdateNeedle(double dValue);//更新指针指向当前值
在对话框Dlg.cpp程序函数CMyMeterDlg::OnInitDialog()中添加m_myMeter.SetNeedleColor(m_ colorNeedle); //设置CMeter类变量m_myMeter指针的颜色
m_myMeter.SetColorTick(TRUE); // 设置CMeter类变量m_myMeter刻度盘的颜色
SetTimer(1,200,NULL);//使指针按照指定时间间隔转动
各个函数可以参考相关的VC资料很容易实现,本文主要讲解其实现的原理。并根据实际需要制作了如图2所示的虚拟指南针仪表。经过实验证明能够以非常高的精度和直观性满足实际应用需要,达到了很好的效果。
4 总结
虚拟仪表的应用,使仪表的读数更加清晰、直观,信息量更多,智能化程度更高,因此具有广泛的应用前景。当然这一领域在我国尚处于起步阶段,要成为真正实用阶段还有很多工作要做,但随着技术的成熟,必将产生深远的影响。
摘 要 虚拟仪表应用越来越广泛,本文根据VC开发虚拟仪表的流程和原理,从实际应用角度设计了一个虚拟指南针仪表的实例。
关键词 虚拟仪表;VC++面向对象;动态仿真
1 引言
随着计算机技术的日益成熟,计算机的应用已渗透到各个领域,各种车载装备也逐步向数字化、智能化方向发展。用数字化的虚拟仪表取代机械式传统仪表已成为实现车辆自动化的一个重要课题。
在车辆中,驾驶员仪表面板是驾驶员获取各种工况数据的重要窗口。长期以来驾驶员仪表面板采用机械式传统仪表,这种传统仪表装置在车辆中占用了固定的空间、显示精度低、可读性差、不易扩展,而且效率十分低下。而采用虚拟仪表后,在驾驶员前方放置一台平板显示屏,为延续传统操作习惯,将原来驾驶员仪表盘的车况数据在显示屏上以模拟表形式显示,为方便读数,增加了数字表及棒图形式显示,而对越限工况及各种报警,在显示屏上以图形指示灯形式指示报警。显示屏可以在车辆不同的状态下显示不同的工况参数及报警信号,各个参数可以根据需要通过热键自由切换,采用虚拟仪表后,仪表的读数一目了然,可读性好,读数精度高,并且容易升级、扩展。因此,虚拟仪表是未来车辆的发展方向。
2 虚拟仪表控件的组成原理
仪表解决方案采用完全开放的组织架构,将仪表创建切分为:仪表盘、指针、度量刻度以及背景几个部分,这些部分既相互关联,又充分独立,当创建新的仪表的时候,可以根据需要将其进行任意组合,例如圆盘仪表盘+圆盘刻度+指针,就可以构建仪表。
框架可以由三个基础类YPaintBase,YShapeBase和YFillBase组成。其中YFillBase是填充基础类(简称“填充”),它负责对颜色、图像的填充,边框等。YShapeBase是基本图形基础类(简称“形状”),由此类派生出简单的基本图形,如:圆、三角、五角星、特殊指针样式。YPaintBase是逻辑组合基础类(简称“逻辑”),由YPaintBase把YShapeBase和YFillBase进行组合,构建出复杂图形,而复杂图形可由YPaintBase的派生类再次组合。
框架也可由函数体来完成,分别定义一些画背景、刻度、指针的函数,即可完成上述功能,本文采用第二种方式来实现仪表框架的建立。
3 应用实例
首先建立一个工程文件命名为Meter,采用对话框格式,其余选择默认选项即可。添加一个新类CMeter,里面增加如下函数体[1]:
void DrawNeedle(CDC *pDC);//画指针
void DrawMeterBackground(CDC *pDC, CRect &rect);//画仪表背景
void SetAngleRange(int nStartAngleDeg, int nEndAngle Deg); //表盘圆弧起始终止角度
void SetSubTicks(int nSubTicks); //设置每两个大刻度之间分为几个子刻度数
void SetTicks(int nTicks);//设置整个表盘分为几个大刻度数
void DrawValue(CDC *pDC);//表盘上的数值显示
void SetColorTick(BOOL bColorTick = FALSE);//设置刻度盘颜色
void SetValueDecimals(int nDecimals); // 设置数值显示精度(小数点后位数)
void SetUnits(CString &strUnits);// 设置单位
void SetScaleDecimals(int nDecimals); // 设置刻度显示精度(小数点后位数)
void SetRange(double dMin, double dMax); //设置可测量范围
void SetNeedleColor (COLORREF colorNeedle); //设置指针颜色
void UpdateNeedle(double dValue);//更新指针指向当前值
在对话框Dlg.cpp程序函数CMyMeterDlg::OnInitDialog()中添加m_myMeter.SetNeedleColor(m_ colorNeedle); //设置CMeter类变量m_myMeter指针的颜色
m_myMeter.SetColorTick(TRUE); // 设置CMeter类变量m_myMeter刻度盘的颜色
SetTimer(1,200,NULL);//使指针按照指定时间间隔转动
各个函数可以参考相关的VC资料很容易实现,本文主要讲解其实现的原理。并根据实际需要制作了如图2所示的虚拟指南针仪表。经过实验证明能够以非常高的精度和直观性满足实际应用需要,达到了很好的效果。
4 总结
虚拟仪表的应用,使仪表的读数更加清晰、直观,信息量更多,智能化程度更高,因此具有广泛的应用前景。当然这一领域在我国尚处于起步阶段,要成为真正实用阶段还有很多工作要做,但随着技术的成熟,必将产生深远的影响。
相关文章推荐
- 一种在windows平台下实现自动操作应用的方法,附带源码地址及使用方法
- 利用Windows的命令行工具tasklist和findstr,start结合计划任务实现一种进程监控的方案
- C++ Builder中应用GDI实现虚拟台屏
- windows的分层驱动--内核实现的一种方式
- javascript利用控件对windows的操作实现原理与应用
- 一种Windows下线程同步的实现方法 .
- Windows下Apache+Tomcat实现应用集群
- 用VC实现动态改变Windows的显示特性
- VC实现动画应用两则
- JAVA中多线程的一种实现及应用
- 一种脱离VC编程软件的方法学习C/C++编程(搭建EditPlus实现在文本编辑框中执行.c文件
- 基于Xen实现一种domain0和domainU的应用层数据交互高效机制
- [Windows通用应用开发]Toast通知(一)——Toast实现
- VC下实现windows编程实现Socket通信
- Windows平台实现一种好看又好用的UI规划
- Creating Dialogbased Windows Application (3) / 创建基于对话框的Windows应用程序(三)Checkbox的应用、窗体置顶、设置图标 / VC++, Windows
- MySQL数据库接口的VC实现与应用
- 用VC++实现Windows 2000/XP下的休眠
- Apache的应用六---实现虚拟主机之二
- windows DLL动态连接库文件的实现和应用