65.9K
CodeProject 正在变化。 阅读更多。
Home

改进的模拟仪表盘控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.76/5 (11投票s)

2000年6月20日

viewsIcon

212851

downloadIcon

3847

用于显示实时数据的模拟仪表盘控件

  • 下载演示项目 - 42 Kb
  • Sample Image - 3dMeter.gif

    我再次致力于实时数据展示,坦白地说 - 我已经厌倦了看到我在文章 "模拟仪表类" 中提供的相当平淡的模拟仪表。 此外,我目前正在开发的应用需要将仪表显示在 CFormView 派生视图中。

    因此,我着手改进仪表 - 提供以下增强功能

    • 一个更好看的、3D 风格的仪表。
    • 使用系统颜色,从而使仪表能够与对话框或 FormView 的其余部分 "融为一体",而不管显示设置如何。 (仪表颜色基于您的显示属性确定。)
    • 一个更简单的修改参数的界面。

    将仪表添加到您的对话框或 FormView

    1. 在资源编辑器中,绘制一个新的 "Picture" 并将其命名为类似 "IDC_STATICMETER" 的名称。 确保选中 "Visible",并且类型为 "Frame"。
    2. 在 ClassWizard(针对您的对话框或 FormView)中,为 IDC_STATICMETER 添加一个成员变量。 将 "name" 命名为 "m_3DMeterCtrl"。 在 "Category" 下选择 "Control",并将 "Variable Type" 设置为 "CStatic"。
    3. 转到与对话框或 FormView 关联的头文件,并将 CStatic 替换为 C3DMeterCtrl,用于新分配的变量。
    	C3DMeterCtrl m_3DMeterCtrl ;
    1. 确保在与您的对话框或 FormView 关联的头文件中包含头文件 3DMeterCtrl.h。

     

    定位指针

    要放置指针,只需调用仪表的 "UpdateNeedle" 成员函数

    	dValue = 1.234 ;
    	m_3DMeterCtrl.UpdateNeedle(dValue);

     

    工作原理

    仪表在所需矩形中分三个步骤绘制。

    1. 绘制背景。 这通常通过 BitBlt 一个存储的背景图像来实现,其中包含仪表盘面、单位和限值。 背景图像在首次绘制仪表时以及每次更改背景项时生成。
    2. 指针绘制在背景上。 指针基于围绕仪表盘面建立的区域进行剪裁。
    3. 数值显示在指针下方的框中。

     

    与仪表有更多乐趣

    如上所述,仪表控件会检测您通过显示属性设置的颜色。 (不,这并非动态的,因此当您更改显示属性时,您将不得不强制仪表重新绘制自身以使其更改。)但是,您可以对仪表做一些事情。

    设置指针颜色

    	colorNeedle = RGB(0, 255, 0) ;
    	m_3DMeterCtrl.SetNeedleColor(colorNeedle) ;

    设置范围

    	dMeterMin = -2.0 ;
    	dMeterMax =  2.0 ;
    	m_3DMeterCtrl.SetRange(dMeterMin, dMeterMax) ;

    设置单位

    	strUnits.Format("mm") ;
    	m_3DMeterCtrl.SetUnits(strUnits);

    设置最大值和最小值的十进制位数

    	nScaleDecimals = 2 ;
       	m_3DMeterCtrl.SetScaleDecimals(nScaleDecimals) ;

    设置当前值的十进制位数

    	nDecimals = 4 ;
    	m_3DMeterCtrl.SetDecimals(nDecimals) ;

    到目前为止,我已将此部署在分割器应用程序中(左侧是带有仪表的 CFormView,右侧是 CView),它似乎在 Windows 98-SE 下运行良好。 但是,我相信你们可以找到 "改进的领域"。 (我讨厌使用 "b-u-g-s" 这个词。)

    祝您使用愉快,请发布您的反馈!

        - Mark Malburg

    © . All rights reserved.