虚拟仪表在VC++中的的一种应用实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
虚拟仪表在VC中的的一种应用实现

虚拟仪表在VC++中的一种应用实现 摘 要 虚拟仪表应用越来越广泛,本文根据VC开发虚拟仪表的流程和原理,从实际应用角度设计了一个虚拟指南针仪表的实例。 关键词 虚拟仪表;VC++面向对象;动态仿真1 引言 随着计算机技术的日益成熟,计算机的应用已渗透到各个领域,各种车载装备也逐步向数字化、智能化方向发展。用数字化的虚拟仪表取代机械式传统仪表已成为实现车辆自动化的一个重要课题。在车辆中,驾驶员仪表面板是驾驶员获取各种工况数据的重要窗口。长期以来驾驶员仪表面板采用机械式传统仪表,这种传统仪表装置在车辆中占用了固定的空间、显示精度低、可读性差、不易扩展,而且效率十分低下。而采用虚拟仪表后,在驾驶员前方放置一台平板显示屏,为延续传统操作习惯,将原来驾驶员仪表盘的车况数据在显示屏上以模拟表形式显示,为方便读数,增加了数字表及棒图形式显示,而对越限工况及各种报警,在显示屏上以图形指示灯形式指示报警。显示屏可以在车辆不同的状态下显示不同的工况参数及报警信号,各个参数可以根据需要通过热键自由切换,采用虚拟仪表后,仪表的读数一目了然,可读性好,读数精度高,并且容易升级、扩展。因此,虚拟仪表是未来车辆的发展方向。2 虚拟仪表控件的组成原理 仪表解决方案采用完全开放的组织架构,将仪表创建切分为:仪表盘、指针、度量刻度以及背景几个部分,这些部分既相互关联,又充分独立,当创建新的仪表的时候,可以根据需要将其进行任意组合,例如圆盘仪表盘+圆盘刻度+指针,就可以构建如图1所示的仪表。图1 仪表框架原理 框架可以由三个基础类YPaintBase,YShapeBase和YFillBase组成。其中YFillBase是填充基础类(简称“填充”),它负责对颜色、图像的填充,边框等。YShapeBase是基本图形基础类(简称“形状”),由此类派生出简单的基本图形,如:圆、三角、五角星、特殊指针样式。YPaintBase是逻辑组合基础类(简称“逻辑”),由YPaintBase把YShapeBase和YFillBase进行组合,构建出复杂图形,而复杂图形可由YPaintBase的派生类再次组合。 框架也可由函数体来完成,分别定义一些画背景、刻度、指针的函数,即可完成上述功能,本文采用第二种方式来实现仪表框架的建立。3 应用实例 首先建立一个工程文件命名为Meter,采用对话框格式,其余选择默认选项即可。添加一个新类CMeter,里面增加如下函数体[1]: void DrawNeedle(CDC *pDC);//画指针 void DrawMeterBackground(CDC *pDC, CRect amp;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 amp;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);//使指针按照指定时间间隔转动图2 虚拟指南针 各个函数可以参考相关的VC资料很容易实现,本文主要讲解其实现的原理。并根据实际需要制作了如图2所示的虚拟指南针仪表。经过实验证明能够以非常高的精度和直观性满足实际应用需要,达到了很好的效果。4 总

文档评论(0)

ayangjiayu3 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档