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
四川省成都石室中学2017-2018学年高一下学期期中考试题英语试题+06-25
首届全国财政系统财税知识网络答题竞赛答案2014021109-11
轴类零件数控加工工艺分析毕业论文10-05
业务员成长训练讲师手册09-28
LYO-26冻干机再验证方案05-22
孩子两岁半送幼儿园和三岁送有什么区别02-21
案例:新东方学校的战略选择09-30
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 控件
- 学习
- GRAPH
- 抛锚应急预案演练方案
- 《畜禽生产》养牛测试题(多选题)
- 苏尔寿RTA型主机功率的估算
- 职业道德与服务意识
- 中学生校园暴力与法治教育问题研究
- linux用户管理任务实验报告
- WTO透明度原则和我国行政公开制度
- 低碳经济与循环经济满分题库
- 佤族舞蹈资源对沧源艺术职业教育的推动作用
- 调整电子汽车衡偏载误差的简便方法
- 华东政法大学科研处核心期刊分类
- 中国古典舞与佛教文化
- 浅析人文摄影在纪实摄影中的价值体现 - 图文
- 审计基础知识综合练习
- MPC在solid和shell单元连接处应用 - 图文
- 2015年湖南移动家客代维人员认证考试A卷(答案)
- 高考语文 高频文言实词60词表解
- 窝沟封闭几岁做
- 新时代教师应有新作为
- 行政处罚法基本知识讲义提纲