0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用LABwindows/CVI軟件搭建學(xué)生管理器界面(二)

CHANBAEK ? 來源:小陳是個工程師 ? 作者:xiaoxiaodawei ? 2023-01-16 14:17 ? 次閱讀

上期使用LABwindows/CVI這個軟件搭建了學(xué)生管理器的UI界面,這期就是將UI界面中各個控件編程,使其能夠?qū)崿F(xiàn)一定的功能。

關(guān)鍵詞:控件編程;

01控件編程

1.1、生成控件的頭文件內(nèi)容

生成框架代碼之后,我們應(yīng)該可以在uir同名的h文件中看到CVI為我們生成了如下代碼,包含了CVI框架運行、CVI用戶界面運行所需要的基本函數(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運行時庫(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īng)常用到
#define LEN sizeof(struct Student) //宏定義節(jié)點長度得命名
#define TYPE struct Student      //宏定義結(jié)構(gòu)體變量命名
struct Student                   //定義一個學(xué)生類型結(jié)構(gòu)體,包括學(xué)號,分數(shù)
{
  char Name[20];
  int Number;
  TYPE *Next;             //next是指針變量,指向結(jié)構(gòu)體變量
};
TYPE *Head = NULL;         //定義頭指針地址,全局變量
TYPE *PTmp = NULL;        //定義新開辟結(jié)點變量,全局變量

以下就是五個按鍵對應(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é)點空間
    memset(PTmp, 0, sizeof(struct Student));        // 將空間清零
    PTmp->Number = Number;              //結(jié)點中保存學(xué)號,姓名
    strcat(PTmp->Name, Name);
    struct Student *PMov = Head;                  //每次都返回頭指針
    if(Head == NULL)
    {
      Head = PTmp;                  //把第一個結(jié)點給頭指針
    }
    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é)點函數(shù)

代碼如下:

void delet(TYPE* head)                   //定義結(jié)點刪除函數(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é)點
  {
    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é)點
  }
  else {
    MessagePopup("提示", "學(xué)生節(jié)點不存在...");             //顯示對話消息對話框  
  }
}

1.6、鏈表顯示函數(shù)

代碼如下:

void print(TYPE * head)                    //定義將鏈表輸出函數(shù)
{
  TYPE * p;                           //定義指針
  p = head;                            //使p指向第一個結(jié)點
  int count = 0;                         //記錄多少哥結(jié)點數(shù)
  if(Head == NULL)                  //判斷是否為空
  {
    MessagePopup("提示", "表中不包含任何學(xué)生...");  //顯示對話消息對話框 
  }
  else
  if(head!=NULL)                                  //輸出第一個結(jié)點后的信息
    do {
      printf("第%d個學(xué)生:%s 學(xué)號:%d號\\n", ++count, p->Name, p->Number);
//顯示結(jié)點信息 
      p = p->Next;                              //指向下個結(jié)點
    } 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é)點
  }
  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é)點的指針域,也就是說把in的指針域指向p的下一個節(jié)點
    p->Next = in;       //填充p節(jié)點的指針域,把p的指針域重新指向in
  }
  else {
    MessagePopup("提示", "表中不包含任何學(xué)生...");//顯示對話消息對話框 
  }
}

1.8、鏈表的修改

代碼如下:

void change(TYPE* head)       //修改指定位置的結(jié)點的信息函數(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é)點  
    p = p->Next;
    i++;
  }                         //找到相應(yīng)的位置結(jié)點
  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)??!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • LabWindows
    +關(guān)注

    關(guān)注

    15

    文章

    62

    瀏覽量

    47953
  • 管理器
    +關(guān)注

    關(guān)注

    0

    文章

    246

    瀏覽量

    18509
  • CVI
    CVI
    +關(guān)注

    關(guān)注

    9

    文章

    41

    瀏覽量

    22195
  • 控件編程
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    5102
  • ui界面
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    1573
收藏 人收藏

    評論

    相關(guā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)用

    載體,以LabWindowsCVI為開發(fā)環(huán)境,主要面向學(xué)生演示飛機的飛行的姿態(tài)(縱向、升降、傾向、俯仰、橫滾和航向)以及飛行過程中各種儀器儀表的變化,使學(xué)生對飛機的飛行原理以及駕駛技
    發(fā)表于 07-12 07:37

    一種LabWindows/CVI與MATLAB混合編程的實現(xiàn)

    Labwindows/CVI 是一套面向測控領(lǐng)域的優(yōu)秀軟件開發(fā)平臺;MATLAB 具有強大的數(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),闡述了主機的硬件和軟件的設(shè)計方法和數(shù)據(jù)分析軟件的實現(xiàn)。
    發(fā)表于 08-31 17:40 ?142次下載

    cvi 8.0 下載 (NI LabWindows 電子測量)

    NI LabWindows/CVI 8.0 (電子測量): NI LabWindows CVI 8.0 最新完整版,專業(yè)強大的用于測試、測量與控制開發(fā)
    發(fā)表于 01-26 09:36 ?889次下載
    <b class='flag-5'>cvi</b> 8.0 下載 (NI <b class='flag-5'>LabWindows</b> 電子測量)

    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 ?1091次閱讀

    LabWindows_CVI多線程技術(shù)在油門測試軟件中的應(yīng)用_倪

    LabWindows_CVI多線程技術(shù)在油門測試軟件中的應(yīng)用_倪笑宇
    發(fā)表于 01-13 21:40 ?3次下載

    LabWindows教程之LabWindows CVI的虛擬儀器設(shè)計與應(yīng)用教材免費下載

    本文檔的主要內(nèi)容詳細介紹的是LabWindows教程之LabWindows CVI的虛擬儀器設(shè)計與應(yīng)用教材免費下載。 本書詳盡、系統(tǒng)地介紹了NI公司推出的一種虛擬儀器軟件設(shè)計平臺——
    發(fā)表于 12-03 08:00 ?155次下載

    LabWindows CVI在USB2. 0接口數(shù)據(jù)采集在開發(fā)中的應(yīng)用

    文章介紹了虛擬儀器軟件LabWindows/CVI在USB2. 0接口數(shù)據(jù)采集中的應(yīng)用, 闡述了利用LabWindows/
    發(fā)表于 07-02 15:37 ?29次下載
    <b class='flag-5'>LabWindows</b> <b class='flag-5'>CVI</b>在USB2. 0接口數(shù)據(jù)采集<b class='flag-5'>器</b>在開發(fā)中的應(yīng)用

    Labwindows CVI的簡介說明

    CVI全稱LabWindows/CVI,是一個用于測試和測量的ANSI C開發(fā)環(huán)境,使用CVI編寫測控軟件,能夠極大地提高工程師和科學(xué)家們的
    發(fā)表于 03-17 08:00 ?19次下載
    <b class='flag-5'>Labwindows</b> <b class='flag-5'>CVI</b>的簡介說明

    使用LABwindows/CVI軟件搭建學(xué)生管理器界面(一)

      學(xué)習(xí)完鏈表就需要將其加以應(yīng)用,這期使用LABwindows/CVI創(chuàng)建一個學(xué)生管理器,其中用到了鏈表的知識以及LABwindows/
    的頭像 發(fā)表于 01-16 14:07 ?5075次閱讀
    使用<b class='flag-5'>LABwindows</b>/<b class='flag-5'>CVI</b><b class='flag-5'>軟件</b><b class='flag-5'>搭建</b><b class='flag-5'>學(xué)生</b><b class='flag-5'>管理器</b><b class='flag-5'>界面</b>(一)

    使用LABwindows/CVI軟件搭建學(xué)生管理器界面(三)

    上期對LABwindows/CVI建立的學(xué)生管理器的UI界面中的控件進行編程,但是沒有做回調(diào)處理,這期主要對其中控件進行回調(diào)函數(shù)的設(shè)計!
    的頭像 發(fā)表于 01-16 14:21 ?2395次閱讀

    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 ?15次下載