GRAPH控件学习
更新时间:2023-10-21 10:45:01 阅读量: 综合文库 文档下载
- graph控件显示HMI推荐度:
- 相关推荐
UCGUI3.98版本里面多了GRAPH的控件,如下图所示的左边,使用该控件可以不断地在窗体中绘制图线。然而右边的转速表盘由于不是gui给我们提供的控件,而是自己动手编程绘制的图形,所以没有可供调用的函数使其指针实时地自动转动。因此,通过借鉴GRAPH控件的接口函数从而自己编写表盘的数据加载函数。
Graph控件是在回调函数的被初始化的,而在mian函数里面的超级循环通过调用 _AddValues(hGraph);来增加数据显示,
看函数原型,只有GRAPH_DATA_YT_AddValue()这个函数是真正地将数据添加到窗体里面进行显示的,之前的代码都是用来产生随机数据的。
因为在VC里面,ucgui被建立为了一个后缀为.lib的库文件,没有办法看到源代码。那么我们就把ucgui3.98版本的源代码放在在Sourceinsight里面顺藤摸瓜看去下。
typedef struct {
GRAPH_DATA_OBJ GraphDataObj; WM_HMEM hData; int Align; } GRAPH_DATA_YT_OBJ; GRAPH_DATA_YT_OBJ由上诉代码所示为一个将GRAPH空间设置为YT模式下数据保存的结构体,我们暂时不用去管他。继续往下看
WM_LOCK()
#define WM_LOCK() GUI_LOCK()
所以应该是禁止GUI的调度,等于进入了临界区。
pDataYtObj = (GRAPH_DATA_YT_OBJ *)GUI_ALLOC_h2p(hDataObj);
GUI_ALLOC_h2p()这个函数的功能在网上搜到是把句柄转换为指针,那么这句代码就是把类型为GRAPH_DATA_Handle的句柄hDataObj转换为结构体GRAPH_DATA_YT_OBJ的指针。
if (pDataYtObj) 判断指针是否为空
pData = (I16 *)GUI_ALLOC_h2p(pDataYtObj-> hData);
把结构体pDataYtObj中的句柄hData转换为指针并赋值给pData
GRAPH__AddValue(&pDataYtObj->GraphDataObj, pData, &Value, sizeof(I16));
if (pDataObj->PaintObj.hGraph) 判断结构体pDataObj的成员PaintObj中的hGraph是否为空(注意:PaintObj也为一个结构体)。hGraph指向的应该是一个Graph类型的窗体 if (pDataObj->NumItems == pDataObj->MaxNumItems) 判断已有的项目数量(也就是画的数据点数)是否达到了最大的项目数量。
Memmove是在string.h库中的一个函数,介绍如下:
原型:void *memmove( void* dest, const void* src, size_tcount ); 用法:#include
功能:由src所指内存区域复制count个字节到dest所指内存区域。 说明:src和dest所指内存区域可以重叠,但复制后dest内容会被更改。函数返回指向dest的指针。
memmove((U8 *)pData, (U8 *)pData + Size, Size * (pDataObj->MaxNumItems - 1));
memmove((U8 *)pData + Size * (pDataObj->NumItems - 1), pValue, Size);
} else {
memmove((U8 *)pData + Size * pDataObj->NumItems++, pValue, Size); }
上面的语句是根据现在的点数是不是达到了最大的数量,将数据插入到要画的数组当中。
_InvalidateGraph(pDataObj->PaintObj.hGraph);
分析这段代码,主要实现的功能就是得到控件Graph内的一块区域,然后使之无效掉。那么在回调函数当中就会重绘无效掉的那部分区域。
解决方案:将表盘那部分建立一个子窗体,每次有新的数据就无效掉子窗体,而不是整个窗体,这样节省内存开销。
正在阅读:
GRAPH控件学习10-21
花纹钢板理论重量表11-10
第一届“中国移动杯”西部大学生信息化视觉艺术创意设计大赛05-20
广东省揭阳市2014届高三4月第二次模拟理综试题(WORD版)01-28
2018-2024年中国低合金板行业市场调查及“十三五”投资战略预测报告10-16
VC++编写视频音乐播放器08-14
万能妈妈作文400字06-26
木材种类大全 五05-31
《刷子李》说课稿11-18
一年级上册体育教案-攻关通用版05-21
- 高一物理牛顿运动定律全套学习学案
- 水处理一级反渗透加还原剂亚硫酸氢钠后为什么ORP会升高
- 毕业设计(论文)-正文董家口 - 图文
- 荣盛酒店经营管理公司录用通知及入职承诺书II
- 第二讲 大学英语四级快速阅读技巧
- 质量管理体系文件(2015年委托第三方医药物流配送企业专用版本)
- 214071收款办法
- 苏轼对《文选》选文的评价
- 《诊断学基础B》1-8作业
- 广东省东莞市高一数学下学期期末教学质量检查试题
- 海南电网公司VIS推广应用管理办法
- 红星照耀中国习题
- 苏教版小学语文六年级上册期末复习资料之生字词整理
- 局域网组建与应用—王向东
- 税务稽查内部管理文书样式
- 环保社会实践调查表
- 九年级思品第一单元复习
- 2016年全国注册咨询工程师继续教育公路路线设计规范试卷
- 毕业设计-青岛港董家口港区防波堤设计
- 撞背锻炼方法与益处
- 控件
- 学习
- GRAPH
- 抛锚应急预案演练方案
- 《畜禽生产》养牛测试题(多选题)
- 苏尔寿RTA型主机功率的估算
- 职业道德与服务意识
- 中学生校园暴力与法治教育问题研究
- linux用户管理任务实验报告
- WTO透明度原则和我国行政公开制度
- 低碳经济与循环经济满分题库
- 佤族舞蹈资源对沧源艺术职业教育的推动作用
- 调整电子汽车衡偏载误差的简便方法
- 华东政法大学科研处核心期刊分类
- 中国古典舞与佛教文化
- 浅析人文摄影在纪实摄影中的价值体现 - 图文
- 审计基础知识综合练习
- MPC在solid和shell单元连接处应用 - 图文
- 2015年湖南移动家客代维人员认证考试A卷(答案)
- 高考语文 高频文言实词60词表解
- 窝沟封闭几岁做
- 新时代教师应有新作为
- 行政处罚法基本知识讲义提纲