曲线图(Graph)控件主要是用于数据可视化,通常用于显示某项数据随时间或其他有序序列而变化的趋势。 曲线图控件可以同时显示多条曲线,拥有水平和垂直刻度尺,可以用来标记曲线刻度,背景上可以显示水平和垂直间距不相同的网格。 如果数据数组不适合图形的可见区域,控件可以自动显示滚动条,滚动条允许在大型数据数组中滚动。
emWin中曲线图控件的结构如图 曲线图控件结构 所示,结构中各部分含义的说明见表格 曲线图控件结构含义 。
数据对象、图形的功能要求和应用场景等往往存在些许差异, 曲线图控件针对这些差异提供了两种曲线显示模式,一种是X-Y模式,一种是Y-T模式。
GRAPH_DATA_XY
此模式用于显示由一组点阵坐标(x,y)组成的曲线,对象数据被绘制为折线。 此模式的典型使用场景是绘制函数图形,显示效果如图 X-Y模式显示效果 所示。
GRAPH_DATA_YT
此显示模式用于显示图形上每个横向位置都带有一个Y值的曲线。Y-T模式的典型应用是绘制测量值在不断更新的曲线, 例如温湿度等。此模式的显示效果如图 Y-T模式显示效果 所示。
曲线图控件不支持任何的通知代码、聚焦操作和按键消息, 也就是说无法在对话框回调函数中通过通知代码操作曲线图控件,控件也无法响应外部键盘的动作。
29.1. 创建曲线图控件
29.1.1. 曲线图控件API
曲线图控件的 API 函数比较多,这里我们只列出一些较为常用的,见表格 曲线图控件API 。完整的API函数列表请查阅emWin官方手册。
29.1.2. 曲线图控件创建函数
29.1.2.1. GRAPH_CreateEx()
在指定位置创建一个具有指定大小的新曲线图控件。
代码清单:曲线图-1 函数原型
GRAPH_Handle GRAPH_CreateEx(int x0, int y0, int xSize, int ySize,
WM_HWIN hParent, int WinFlags, int ExFlags,
int Id);
-
x0: 曲线图控件在父坐标中的最左侧像素;
-
y0: 曲线图控件在父坐标中的最顶侧像素;
-
xSize: 曲线图的水平尺寸,以像素为单位;
-
ySize: 曲线图的垂直尺寸,以像素为单位;
-
hParent: 父窗口句柄。如果为0,则将桌面窗口作为其父窗口;
-
WinFlags: 窗口创建标志。由于控件本质上是窗口,所以曲线图控件在创建时可以使用几乎所有的窗口创建标志。 这些标志中按钮最常用的是WM_CF_SHOW。全部创建标志请参考emWin手册的窗口管理器章节;
-
ExFlags: 特殊创建标志。用于设置是否固定横轴网格,默认不固定,使用参数值GRAPH_CF_GRID_FIXED_X可固定横轴网格;
-
Id: 控件ID号。
返回值:创建成功后返回已创建的曲线图控件句柄,创建失败则返回0。
29.1.2.2. GRAPH_CreateIndirect()
从对话框资源表中创建曲线图控件。
代码清单:曲线图-2 函数原型
GRAPH_Handle GRAPH_CreateIndirect(const GUI_WIDGET_CREATE_INFO
*pCreateInfo, WM_HWIN hWinParent,
int x0, int y0, WM_CALLBACK *cb);
-
pCreateInfo: 指向GUI_WIDGET_CREATE_INFO结构的指针;
-
hParent: 父窗口的句柄;
-
x0: 曲线图控件在父坐标中的最左边像素;
-
y0: 曲线图控件在父坐标中的最顶部像素;
-
cb: 回调函数指针。
此函数的第一个参数指向的是 代码清单:控件基础-3 的资源表结构,但不使用其中的para参数, 其中的Flags参数的可选值与GRAPH_CreateEx()函数的ExFlags参数相同,用于设置是否固定横轴网格。
29.2. 曲线图控件基础实验
接下来我们通过一个实验来讲解如何以对话框方式间接创建一个只包含基本功能的简易曲线图控件, 完整的曲线图控件演示实验可参考官方例程WIDGET_GraphYT.c,例程路径如下&