上期使用LABwindows/CVI这个软件搭建了学生管理器的UI界面,这期就是将UI界面中各个控件编程,使其能够实现一定的功能。
关键词:控件编程;
01控件编程
1.1、生成控件的头文件内容
生成框架代码之后,我们应该可以在uir同名的h文件中看到CVI为我们生成了如下代码,包含了CVI框架运行、CVI用户界面运行所需要的基本函数的声明与定义。 show.h是界面文件show.uir的头文件库,包含了界面中的控件的定义与声明:
头文件内柔如下所示:
/**************************************************************************/
/* LabWindows/CVI User Interface Resource (UIR) Include File */
/* */
/* WARNING: Do not add to, delete from, or otherwise modify the contents */
/* of this include file. */
/**************************************************************************/
#include
#ifdef __cplusplus
extern "C" {
#endif
/* Panels and Controls: */
#define PANEL 1 /* callback function: MainCallBack */
#define PANEL_STRING_Name 2 /* control type: string, callback function: (none) */
#define PANEL_BTN_Change 3 /* control type: command, callback function: MainPanelBtnCallback */
#define PANEL_BTN_Show 4 /* control type: command, callback function: MainPanelBtnCallback */
#define PANEL_BTN_insert 5 /* control type: command, callback function: MainPanelBtnCallback */
#define PANEL_BTN_Delete 6 /* control type: command, callback function: MainPanelBtnCallback */
#define PANEL_BTN_Add 7 /* control type: command, callback function: MainPanelBtnCallback */
#define PANEL_NUM_Student_Insert 8 /* control type: numeric, callback function: (none) */
#define PANEL_NUM_Student 9 /* control type: numeric, callback function: (none) */
/* Control Arrays: */
/* (no control arrays in the resource file) */
/* Menu Bars, Menus, and Menu Items: */
/* (no menu bars in the resource file) */
/* Callback Prototypes: */
int CVICALLBACK MainCallBack(int panel, int event, void *callbackData, int eventData1, int eventData2);
int CVICALLBACK MainPanelBtnCallback(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);
#ifdef __cplusplus
}
#endif
1.2、添加的文件
程序如下:
#include
#include //CVI运行时库(CVI Run-Time Engine)
#include //CVI用户界面库(CVI User Interface)
#include //包含了C、C++语言的最常用的系统函数
#include "show.h"
1.3、添加结构体
结构体程序如下:
static int panelHandle;
//为面板的全局句柄,当对面板或者面板上的控件进行操作时经常用到
#define LEN sizeof(struct Student) //宏定义节点长度得命名
#define TYPE struct Student //宏定义结构体变量命名
struct Student //定义一个学生类型结构体,包括学号,分数
{
char Name[20];
int Number;
TYPE *Next; //next是指针变量,指向结构体变量
};
TYPE *Head = NULL; //定义头指针地址,全局变量
TYPE *PTmp = NULL; //定义新开辟结点变量,全局变量
以下就是五个按键对应的功能函数
1.4、动态链表函数
代入如下:
TYPE* Creat(void) //定义函数,此函数返回一个指向链表头的指针
{
char Name[20] = {0}; //定义保存姓名的数组
int Number = 0; //定义保存姓名的整形
GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name);
//得到PANEL_STRING_Name字符框中字符串给Name
GetCtrlAttribute(panelHandle, PANEL_NUM_Student, ATTR_CTRL_VAL, &Number);
//得到PANEL_SPANEL_NUM_Student整形框中字符串给Number
if((strlen(Name) < 1) || (Number < 1))
//根据输入的数据长度来判断学生数据是否输入有误
{
MessagePopup("提示", "请重新输入..."); //显示对话消息对话框
}
else
{
PTmp = (struct Student *)malloc(sizeof(struct Student));//开辟新的结点空间
memset(PTmp, 0, sizeof(struct Student)); // 将空间清零
PTmp->Number = Number; //结点中保存学号,姓名
strcat(PTmp->Name, Name);
struct Student *PMov = Head; //每次都返回头指针
if(Head == NULL)
{
Head = PTmp; //把第一个结点给头指针
}
else
{
while(PMov->Next) //循环从头到尾找指针域
{
PMov = PMov->Next;
}
PMov->Next = PTmp; //找到指针域后更新
}
printf("新添加了1个学生:%s 学号:%d号\\n", PTmp->Name, PTmp->Number);
//显示添加信息
}
return (Head); //返回首地址
}
1.5、删除结点函数
代码如下:
void delet(TYPE* head) //定义结点删除函数
{
TYPE* p = head, * in; //定义两边指针
int i = 0; //定义记录值
char Name[20] = {0}; //定义姓名数组
GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name);
//得到PANEL_STRING_Name字符框中字符串给Name
while ((strcmp(p->Name, Name) !=0) && p != NULL)
//找到对应姓名并且不为空的结点
{
in = p; //找到左边的
p = p->Next; //找到右边的
i++;
}
if (p != NULL)
{
printf("删除的学生为:%s 学号:%d号\\n", p->Name, p->Number); //显示删除信息
in->Next = p->Next; //将左右链接
free(p); //释放中间结点
}
else {
MessagePopup("提示", "学生节点不存在..."); //显示对话消息对话框
}
}
1.6、链表显示函数
代码如下:
void print(TYPE * head) //定义将链表输出函数
{
TYPE * p; //定义指针
p = head; //使p指向第一个结点
int count = 0; //记录多少哥结点数
if(Head == NULL) //判断是否为空
{
MessagePopup("提示", "表中不包含任何学生..."); //显示对话消息对话框
}
else
if(head!=NULL) //输出第一个结点后的信息
do {
printf("第%d个学生:%s 学号:%d号\\n", ++count, p->Name, p->Number);
//显示结点信息
p = p->Next; //指向下个结点
} while (p != NULL);
}
1.7、链表的插入
代码如下:
void insert(TYPE* head) { //定义链表的插入函数
TYPE* p = head, * in; //定义首尾指针
int i = 0; //记录值
int n; //定义插入的地方
char Name[20] = {0}; //定义姓名数组 ,学号
int Number = 0;
GetCtrlAttribute(panelHandle, PANEL_NUM_Student_Insert, ATTR_CTRL_VAL, &n);
//得到PANEL_NUM_Student_Insert整形中数据给n
while (i < (n-1) && p != NULL) {
p = p->Next;
i++; //找到相应结点
}
if (p != NULL) {
in = (TYPE*)malloc(sizeof(TYPE)); //开辟新的空间
memset(in, 0, sizeof(struct Student)); //清零
GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name); //得到PANEL_STRING_Name字符中数据给Name
GetCtrlAttribute(panelHandle, PANEL_NUM_Student, ATTR_CTRL_VAL, &Number);//得到PANEL_NUM_Student整形中数据给Number
in->Number = Number;
strcat(in->Name, Name); //复制信息给in->Name
printf("插入学生:%s 学号:%d号\\n", in->Name, in->Number); //显示插入的信息
in->Next = p->Next;
//填充in节点的指针域,也就是说把in的指针域指向p的下一个节点
p->Next = in; //填充p节点的指针域,把p的指针域重新指向in
}
else {
MessagePopup("提示", "表中不包含任何学生...");//显示对话消息对话框
}
}
1.8、链表的修改
代码如下:
void change(TYPE* head) //修改指定位置的结点的信息函数
{
TYPE* p = head; //传入首地址
int i = 0; //记录值
char Name[20] = {0}; //定义姓名数组 ,学号
int Number = 0;
GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name);
//得到PANEL_STRING_Name字符中数据给Name
while ((strcmp(p->Name, Name) !=0) && p != NULL) {
//找到对应姓名并且不为空的结点
p = p->Next;
i++;
} //找到相应的位置结点
if (p != NULL) {
GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name); //得到PANEL_STRING_Name字符中数据给Name
GetCtrlAttribute(panelHandle, PANEL_NUM_Student, ATTR_CTRL_VAL, &Number);//得到PANEL_NUM_Student整形中数据给Number
p->Number = Number; //保存学号
printf("修改的学生:%s 学号:%d号\\n", p->Name, p->Number); //显示修改的信息
}
else
MessagePopup("提示", "表中不包含该学生"); //显示对话消息对话框
}
下期就是讲解控件怎么回调!!
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
LabWindows
+关注
关注
15文章
62浏览量
47947 -
管理器
+关注
关注
0文章
246浏览量
18502 -
CVI
+关注
关注
9文章
41浏览量
22190 -
控件编程
+关注
关注
0文章
2浏览量
5101 -
ui界面
+关注
关注
0文章
11浏览量
1573
发布评论请先 登录
相关推荐
关于LabWindows/CVI和Labview
最近在学习LabWindows/CVI,想找个学习网站,最后就找到了这个Labview的网站,不知道有没有人用LabWindows/CVI,二
发表于 07-04 15:49
美国国家仪器(NI)软件Labview,Labwindows cvi,Motion,Vision,DAQ开发与培训
`` 本帖最后由 wuxi2010 于 2016-3-7 16:42 编辑
1)Labview(Labwindows cvi)与access/SQL server数据库程序开发 2
发表于 02-29 12:21
采用LabWindows CVI的飞行模拟器应用
载体,以LabWindows/CVI为开发环境,主要面向学生演示飞机的飞行的姿态(纵向、升降、倾向、俯仰、横滚和航向)以及飞行过程中各种仪器仪表的变化,使学生对飞机的飞行原理以及驾驶技
发表于 07-12 07:37
一种LabWindows/CVI与MATLAB混合编程的实现
Labwindows/CVI 是一套面向测控领域的优秀软件开发平台;MATLAB 具有强大的数据处理函数库和多样且简易的绘图方法。本文提出的修改LabWindows/
发表于 06-24 09:29
•52次下载
LabWindows/CVI基础教程
LabWindows/CVI基础教程:LabWindows/CVI是National Instruments公司推出的一套面向测控领域的软件
发表于 07-23 08:22
•0次下载
基于多CPU和LabWindows/CVI 的行车记录仪系统
介绍基于多CPU 和LabWindows/CVI 的行车记录仪系统,阐述了主机的硬件和软件的设计方法和数据分析软件的实现。
发表于 08-31 17:40
•142次下载
cvi 8.0 下载 (NI LabWindows 电子测量)
NI LabWindows/CVI 8.0 (电子测量): NI LabWindows CVI 8.0 最新完整版,专业强大的用于测试、测量与控制开发
发表于 01-26 09:36
•887次下载
NI宣布推出ANSI C开发环境LabWindows/CVI
NI 宣布推出ANSI C开发环境LabWindows/CVI 2009
美国国家仪器有限公司(National Instruments,简称NI)近日宣布推出LabWindows/CVI
发表于 01-16 10:27
•1086次阅读
LabWindows教程之LabWindows CVI的虚拟仪器设计与应用教材免费下载
本文档的主要内容详细介绍的是LabWindows教程之LabWindows CVI的虚拟仪器设计与应用教材免费下载。
本书详尽、系统地介绍了NI公司推出的一种虚拟仪器软件设计平台——
发表于 12-03 08:00
•155次下载
LabWindows CVI在USB2. 0接口数据采集器在开发中的应用
文章介绍了虚拟仪器软件LabWindows/CVI在USB2. 0接口数据采集器中的应用, 阐述了利用LabWindows/
发表于 07-02 15:37
•29次下载
Labwindows CVI的简介说明
CVI全称LabWindows/CVI,是一个用于测试和测量的ANSI C开发环境,使用CVI编写测控软件,能够极大地提高工程师和科学家们的
发表于 03-17 08:00
•19次下载
使用LABwindows/CVI软件搭建学生管理器界面(三)
上期对LABwindows/CVI建立的学生管理器的UI界面中的控件进行编程,但是没有做回调处理,这期主要对其中控件进行回调函数的设计!
LabWindows CVI基本学习教程
本书主要介绍了LabWindows/CVI 6.0 下的C语言编程技术教程,主要内容有: LabWindows/CVI 6.0 的集成开发环境,面板、控件和菜单的设计,交互式代码生成,
发表于 05-30 14:27
•15次下载
评论