上期使用LABwindows/CVI這個軟件搭建了學(xué)生管理器的UI界面,這期就是將UI界面中各個控件編程,使其能夠?qū)崿F(xiàn)一定的功能。
關(guān)鍵詞:控件編程;
01控件編程
1.1、生成控件的頭文件內(nèi)容
生成框架代碼之后,我們應(yīng)該可以在uir同名的h文件中看到CVI為我們生成了如下代碼,包含了CVI框架運(yùn)行、CVI用戶界面運(yùn)行所需要的基本函數(shù)的聲明與定義。 show.h是界面文件show.uir的頭文件庫,包含了界面中的控件的定義與聲明:
頭文件內(nèi)柔如下所示:
/**************************************************************************/
/* 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運(yùn)行時庫(CVI Run-Time Engine)
#include //CVI用戶界面庫(CVI User Interface)
#include //包含了C、C++語言的最常用的系統(tǒng)函數(shù)
#include "show.h"
1.3、添加結(jié)構(gòu)體
結(jié)構(gòu)體程序如下:
static int panelHandle;
//為面板的全局句柄,當(dāng)對面板或者面板上的控件進(jìn)行操作時經(jīng)常用到
#define LEN sizeof(struct Student) //宏定義節(jié)點(diǎn)長度得命名
#define TYPE struct Student //宏定義結(jié)構(gòu)體變量命名
struct Student //定義一個學(xué)生類型結(jié)構(gòu)體,包括學(xué)號,分?jǐn)?shù)
{
char Name[20];
int Number;
TYPE *Next; //next是指針變量,指向結(jié)構(gòu)體變量
};
TYPE *Head = NULL; //定義頭指針地址,全局變量
TYPE *PTmp = NULL; //定義新開辟結(jié)點(diǎn)變量,全局變量
以下就是五個按鍵對應(yīng)的功能函數(shù)
1.4、動態(tài)鏈表函數(shù)
代入如下:
TYPE* Creat(void) //定義函數(shù),此函數(shù)返回一個指向鏈表頭的指針
{
char Name[20] = {0}; //定義保存姓名的數(shù)組
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))
//根據(jù)輸入的數(shù)據(jù)長度來判斷學(xué)生數(shù)據(jù)是否輸入有誤
{
MessagePopup("提示", "請重新輸入..."); //顯示對話消息對話框
}
else
{
PTmp = (struct Student *)malloc(sizeof(struct Student));//開辟新的結(jié)點(diǎn)空間
memset(PTmp, 0, sizeof(struct Student)); // 將空間清零
PTmp->Number = Number; //結(jié)點(diǎn)中保存學(xué)號,姓名
strcat(PTmp->Name, Name);
struct Student *PMov = Head; //每次都返回頭指針
if(Head == NULL)
{
Head = PTmp; //把第一個結(jié)點(diǎn)給頭指針
}
else
{
while(PMov->Next) //循環(huán)從頭到尾找指針域
{
PMov = PMov->Next;
}
PMov->Next = PTmp; //找到指針域后更新
}
printf("新添加了1個學(xué)生:%s 學(xué)號:%d號\\n", PTmp->Name, PTmp->Number);
//顯示添加信息
}
return (Head); //返回首地址
}
1.5、刪除結(jié)點(diǎn)函數(shù)
代碼如下:
void delet(TYPE* head) //定義結(jié)點(diǎn)刪除函數(shù)
{
TYPE* p = head, * in; //定義兩邊指針
int i = 0; //定義記錄值
char Name[20] = {0}; //定義姓名數(shù)組
GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name);
//得到PANEL_STRING_Name字符框中字符串給Name
while ((strcmp(p->Name, Name) !=0) && p != NULL)
//找到對應(yīng)姓名并且不為空的結(jié)點(diǎn)
{
in = p; //找到左邊的
p = p->Next; //找到右邊的
i++;
}
if (p != NULL)
{
printf("刪除的學(xué)生為:%s 學(xué)號:%d號\\n", p->Name, p->Number); //顯示刪除信息
in->Next = p->Next; //將左右鏈接
free(p); //釋放中間結(jié)點(diǎn)
}
else {
MessagePopup("提示", "學(xué)生節(jié)點(diǎn)不存在..."); //顯示對話消息對話框
}
}
1.6、鏈表顯示函數(shù)
代碼如下:
void print(TYPE * head) //定義將鏈表輸出函數(shù)
{
TYPE * p; //定義指針
p = head; //使p指向第一個結(jié)點(diǎn)
int count = 0; //記錄多少哥結(jié)點(diǎn)數(shù)
if(Head == NULL) //判斷是否為空
{
MessagePopup("提示", "表中不包含任何學(xué)生..."); //顯示對話消息對話框
}
else
if(head!=NULL) //輸出第一個結(jié)點(diǎn)后的信息
do {
printf("第%d個學(xué)生:%s 學(xué)號:%d號\\n", ++count, p->Name, p->Number);
//顯示結(jié)點(diǎn)信息
p = p->Next; //指向下個結(jié)點(diǎn)
} while (p != NULL);
}
1.7、鏈表的插入
代碼如下:
void insert(TYPE* head) { //定義鏈表的插入函數(shù)
TYPE* p = head, * in; //定義首尾指針
int i = 0; //記錄值
int n; //定義插入的地方
char Name[20] = {0}; //定義姓名數(shù)組 ,學(xué)號
int Number = 0;
GetCtrlAttribute(panelHandle, PANEL_NUM_Student_Insert, ATTR_CTRL_VAL, &n);
//得到PANEL_NUM_Student_Insert整形中數(shù)據(jù)給n
while (i < (n-1) && p != NULL) {
p = p->Next;
i++; //找到相應(yīng)結(jié)點(diǎn)
}
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字符中數(shù)據(jù)給Name
GetCtrlAttribute(panelHandle, PANEL_NUM_Student, ATTR_CTRL_VAL, &Number);//得到PANEL_NUM_Student整形中數(shù)據(jù)給Number
in->Number = Number;
strcat(in->Name, Name); //復(fù)制信息給in->Name
printf("插入學(xué)生:%s 學(xué)號:%d號\\n", in->Name, in->Number); //顯示插入的信息
in->Next = p->Next;
//填充in節(jié)點(diǎn)的指針域,也就是說把in的指針域指向p的下一個節(jié)點(diǎn)
p->Next = in; //填充p節(jié)點(diǎn)的指針域,把p的指針域重新指向in
}
else {
MessagePopup("提示", "表中不包含任何學(xué)生...");//顯示對話消息對話框
}
}
1.8、鏈表的修改
代碼如下:
void change(TYPE* head) //修改指定位置的結(jié)點(diǎn)的信息函數(shù)
{
TYPE* p = head; //傳入首地址
int i = 0; //記錄值
char Name[20] = {0}; //定義姓名數(shù)組 ,學(xué)號
int Number = 0;
GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name);
//得到PANEL_STRING_Name字符中數(shù)據(jù)給Name
while ((strcmp(p->Name, Name) !=0) && p != NULL) {
//找到對應(yīng)姓名并且不為空的結(jié)點(diǎn)
p = p->Next;
i++;
} //找到相應(yīng)的位置結(jié)點(diǎn)
if (p != NULL) {
GetCtrlAttribute(panelHandle, PANEL_STRING_Name, ATTR_CTRL_VAL, Name); //得到PANEL_STRING_Name字符中數(shù)據(jù)給Name
GetCtrlAttribute(panelHandle, PANEL_NUM_Student, ATTR_CTRL_VAL, &Number);//得到PANEL_NUM_Student整形中數(shù)據(jù)給Number
p->Number = Number; //保存學(xué)號
printf("修改的學(xué)生:%s 學(xué)號:%d號\\n", p->Name, p->Number); //顯示修改的信息
}
else
MessagePopup("提示", "表中不包含該學(xué)生"); //顯示對話消息對話框
}
下期就是講解控件怎么回調(diào)?。?/p>
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
LabWindows
+關(guān)注
關(guān)注
15文章
62瀏覽量
48498 -
管理器
+關(guān)注
關(guān)注
0文章
265瀏覽量
19518 -
CVI
+關(guān)注
關(guān)注
9文章
41瀏覽量
22780 -
控件編程
+關(guān)注
關(guān)注
0文章
2瀏覽量
5187 -
ui界面
+關(guān)注
關(guān)注
0文章
11瀏覽量
1978
發(fā)布評論請先 登錄
相關(guān)推薦
熱點(diǎn)推薦
關(guān)于LabWindows/CVI和Labview
最近在學(xué)習(xí)LabWindows/CVI,想找個學(xué)習(xí)網(wǎng)站,最后就找到了這個Labview的網(wǎng)站,不知道有沒有人用LabWindows/CVI,二
發(fā)表于 07-04 15:49
美國國家儀器(NI)軟件Labview,Labwindows cvi,Motion,Vision,DAQ開發(fā)與培訓(xùn)
`` 本帖最后由 wuxi2010 于 2016-3-7 16:42 編輯
1)Labview(Labwindows cvi)與access/SQL server數(shù)據(jù)庫程序開發(fā) 2
發(fā)表于 02-29 12:21
采用LabWindows CVI的飛行模擬器應(yīng)用
載體,以LabWindows/CVI為開發(fā)環(huán)境,主要面向學(xué)生演示飛機(jī)的飛行的姿態(tài)(縱向、升降、傾向、俯仰、橫滾和航向)以及飛行過程中各種儀器儀表的變化,使學(xué)生對飛機(jī)的飛行原理以及駕駛技
發(fā)表于 07-12 07:37
一種LabWindows/CVI與MATLAB混合編程的實(shí)現(xiàn)
Labwindows/CVI 是一套面向測控領(lǐng)域的優(yōu)秀軟件開發(fā)平臺;MATLAB 具有強(qiáng)大的數(shù)據(jù)處理函數(shù)庫和多樣且簡易的繪圖方法。本文提出的修改LabWindows/
發(fā)表于 06-24 09:29
?52次下載
LabWindows/CVI基礎(chǔ)教程
LabWindows/CVI基礎(chǔ)教程:LabWindows/CVI是National Instruments公司推出的一套面向測控領(lǐng)域的軟件
發(fā)表于 07-23 08:22
?0次下載
基于多CPU和LabWindows/CVI 的行車記錄儀系統(tǒng)
介紹基于多CPU 和LabWindows/CVI 的行車記錄儀系統(tǒng),闡述了主機(jī)的硬件和軟件的設(shè)計方法和數(shù)據(jù)分析軟件的實(shí)現(xiàn)。
發(fā)表于 08-31 17:40
?142次下載
cvi 8.0 下載 (NI LabWindows 電子測量)
NI LabWindows/CVI 8.0 (電子測量): NI LabWindows CVI 8.0 最新完整版,專業(yè)強(qiáng)大的用于測試、測量與控制開發(fā)
發(fā)表于 01-26 09:36
?893次下載
NI宣布推出ANSI C開發(fā)環(huán)境LabWindows/CVI
NI 宣布推出ANSI C開發(fā)環(huán)境LabWindows/CVI 2009
美國國家儀器有限公司(National Instruments,簡稱NI)近日宣布推出LabWindows/CVI
發(fā)表于 01-16 10:27
?1274次閱讀
LabWindows_CVI多線程技術(shù)在油門測試軟件中的應(yīng)用_倪
LabWindows_CVI多線程技術(shù)在油門測試軟件中的應(yīng)用_倪笑宇
發(fā)表于 01-13 21:40
?3次下載
LabWindows教程之LabWindows CVI的虛擬儀器設(shè)計與應(yīng)用教材免費(fèi)下載
本文檔的主要內(nèi)容詳細(xì)介紹的是LabWindows教程之LabWindows CVI的虛擬儀器設(shè)計與應(yīng)用教材免費(fèi)下載。
本書詳盡、系統(tǒng)地介紹了NI公司推出的一種虛擬儀器軟件設(shè)計平臺——
發(fā)表于 12-03 08:00
?168次下載
LabWindows CVI在USB2. 0接口數(shù)據(jù)采集器在開發(fā)中的應(yīng)用
文章介紹了虛擬儀器軟件LabWindows/CVI在USB2. 0接口數(shù)據(jù)采集器中的應(yīng)用, 闡述了利用LabWindows/
發(fā)表于 07-02 15:37
?31次下載
Labwindows CVI的簡介說明
CVI全稱LabWindows/CVI,是一個用于測試和測量的ANSI C開發(fā)環(huán)境,使用CVI編寫測控軟件,能夠極大地提高工程師和科學(xué)家們的
發(fā)表于 03-17 08:00
?19次下載
使用LABwindows/CVI軟件搭建學(xué)生管理器界面(一)
學(xué)習(xí)完鏈表就需要將其加以應(yīng)用,這期使用LABwindows/CVI創(chuàng)建一個學(xué)生管理器,其中用到了鏈表的知識以及LABwindows/
使用LABwindows/CVI軟件搭建學(xué)生管理器界面(三)
上期對LABwindows/CVI建立的學(xué)生管理器的UI界面中的控件進(jìn)行編程,但是沒有做回調(diào)處理,這期主要對其中控件進(jìn)行回調(diào)函數(shù)的設(shè)計!
LabWindows CVI基本學(xué)習(xí)教程
本書主要介紹了LabWindows/CVI 6.0 下的C語言編程技術(shù)教程,主要內(nèi)容有: LabWindows/CVI 6.0 的集成開發(fā)環(huán)境,面板、控件和菜單的設(shè)計,交互式代碼生成,
發(fā)表于 05-30 14:27
?18次下載
使用LABwindows/CVI軟件搭建學(xué)生管理器界面(二)
評論