此解决方案采用完全开放的组织架构,将仪表创建切分为:仪表盘、指针、度量刻度以及背景几个部分,这些部分既相互关联,又充分独立,当创建新的仪表的时候,可以根据需要将其进行任意组合,例如圆盘仪表盘+椭圆刻度+三角指针,就可以构建如下仪表:

UCanCode仪器仪表图形是由一组可以灵活绘制并显示进度的类构成,
这些类采用柔性设计,
各个部分可以灵活定制.
主要由三个部分构成:
(注意:仪器仪表组件模块只有在您额外订购的情况下才提供)
1) 背景:
UCanCode仪器仪表图形的背景直接采用任何E-Form++可视化图形组件库现成的图形类来构成,
您可以使用任何E-Form++可视化图形组件库图形类来作为其背景,
例如直线\矩形\椭圆\图像\圆弧\复合图形等等.
如果您选择什么图形类来作为其背景,
则将UCanCode的仪器仪表图形从该类派生,
例如从CFOButtonShape派生,
则仪表的背景是一个矩形按钮.
2) 刻度:
UCanCode仪器仪表的刻度缺省情况下提供了线性刻度和椭圆弧刻度两种,
您可以任选一种,
或者从这两种类作派生,
来创建新的刻度类,
在使用的时候,
需要参考示例程序将其同背景图形粘贴起来.
3) 指针:
UCanCode仪器仪表图形的指针可以非常广泛,
可以使矩形进度条\线性指针\圆弧指针\数字指针等等,
使用的时候,
需要多少指针,
就将多少指针同背景图形粘贴起来即可.
如下图,
有些同时又线性指针和数字指针两种.
同时指针类本身是完全可以派生的.
您如果需要定制指针,
则只需要从相应的类完成派生即可.

E-Form++产品中,我们预先在CFODrawShape基类中预定了几个专门处理仪表图形的虚函数,通过覆盖这些虚函数就可以将刻度和指针等同背景关联起来。函数如下:
public:
/*************************************************************************
|*
|* The following virtual methods defined for meter classes.
|*
\************************************************************************/
// Gen meter's start point.
virtual CPoint GetMeterStartPoint();
// Gen meter's end point.
virtual CPoint GetMeterEndPoint();
// Gen meter's bounding rectangle.
virtual CRect GetMeterRect();
// Obtain the main point.
virtual CPoint GetMeterMainPoint();
// Obtain the main point.
virtual CPoint GetMeterNumberMainPoint();
|
1.
缺省刻度条:
1).
CFOPMeterScale

类CFOPMeterScale
定义了一种线性的刻度,
通过属性Minimum
和属性Maximum来设定最大值和最小值,
如上图.
2).
CFOPMeterEllipticalScale
另外一种刻度类是CFOPMeterEllipticalScale,
是一种沿着椭圆的刻度.
可以设定StartAngle以及SweepAngle.

2.
下列指针类为系统提供:
1) CFOPIndicatorNeedle
指针,
类CFOPIndicatorNeedle定义了一个简单的指针,
指针中心点由参数
PivotPoint 设定.
枚举
FOPIndicatorNeedleStyle定义了指针的各种风格.
如下图.

下面的示例图显示了如何使用CFOPIndicatorNeedle中的fpKite风格,
缺省角度值是60, 使用了CFOPMeterEllipticalScale椭圆盘.
指针的宽度值设置为10.

2) CFOPIndicatorBar
进度条,
类CFOPIndicatorBar现实一个矩形进度条,
可以设定其最大值,最小值,
如下图.

类CFOPIndicatorBar
定义了一个矩形进度条,
可以分段显示不同的值,
通过一个类Phase来设定各段值的最大值\最小值以及每段值得颜色等,
如下图:

3) CFOPIndicatorElliptical
椭圆进度条,
类CFOPIndicatorElliptical是改进度条的定义类.
如下图所示.

4) CFOPIndicatorSlider
游标指针,
类CFOPIndicatorSlider是其定义类,
本身就是一个方块游标,
本身是从类CObject派生下来,
以便可以序列化或者运行时类型识别,
您可以设定其Pen和Brush.
属性Dimensions用于设定其大小.
枚举FOPIndicatorSliderStyle
定义了缺省风格.
包括fpTriangles 和 fpBar风格.

5) CFOPIndicatorKnob
旋钮指针,
CFOPIndicatorKnob定义了一个椭圆形的旋钮指针,在旋钮指针的圆弧的中心有一个小的三角形,颜色为属性值
MarkerColor设定, 从这个类派生新的类,
可以重新自定义外观.

在开发实际仪表图形的时候,
您当前的图形需要从类CFODrawShape或者该类的子类派生下来,
派生的图形类本身将作为仪表图形的背景来使用,
所以具体选用哪个类来进行派生,
主要看哪个类同您的仪表图形的背景接近些.
此外您需要在派生类中定义一个刻度的类,
一般直接使用类CFOPMeterScale或者类CFOPMeterEllipticalScale,
当然也可以使用这两个类本身的,
接下来还要创建一个新的指针对向,可以选择从类CFOPIndicatorBar, CFOPIndicatorElliptical,
CFOPIndicatorSlider, CFOPIndicatorSliderElliptical, CFOPIndicatorNeedle,
或则 CFOPIndicatorKnob之一来创建对向即可。
所有的东西就这样,
参看示例程序:
GaugeDemo
所有的仪表需要的各个部分充分组件化,任何部分均可以通过类的派生或者虚函数的重载来进行扩充和定制.
而仪表的背景则可以使用任何Form++企业版本提供的图形组件来构成, 当然您也可以使用复合图形来创建风格千变万化的仪表,
参考示例:GaugeDemo, 如下:

E-Form++可视化组件库为画布上的任何图形均设定了能独立启动的定时器功能,这也意味中只要您希望某个图形动起来就可以让其动起来,这为开发任何高级的工业控制以及仿真应用提供了最直接的解决办法。
同时系统还有如下特点:
 |
100% MFC设计,并提供所有的源代码,毫无保留。
|
 |
超过30万行有效代码,以及超过300个C++扩展类。
|
 |
自动代码产生程序以及完整的开发文档,帮助您快速构建各种基于Form++的应用。
d |
 |
提供开发高级应用系统的完善的可扩展的界面控制功能。
d |
 |
提供一行代码修改属性并支持Undo/Redo功能。
d |
 |
用户可根据自己的需要对画布、组件、操作等各种操作进行自定义。
d |
 |
同时支持单页面或者多页面应用程序。
d |
 |
对组件进行布局、间隔、顺序编排。
d |
 |
打印、打印预览以及输出到图象。
d |
 |
绘制直线、标注线、曲线、矩形、椭圆、添加文本、以及图片等。
d |
 |
提供超过40个各种开发示例程序。
d |
产品中心
 下载此示范方案 |