上期對(duì)LABwindows/CVI建立的學(xué)生管理器的UI界面中的控件進(jìn)行編程,但是沒(méi)有做回調(diào)處理,這期主要對(duì)其中控件進(jìn)行回調(diào)函數(shù)的設(shè)計(jì)!
關(guān)鍵詞:回調(diào)函數(shù);
01回調(diào)函數(shù)
1.1、主函數(shù)
main函數(shù)是用戶(hù)程序運(yùn)行時(shí)首先被執(zhí)行的函數(shù)。main函數(shù)實(shí)現(xiàn)的功能分別是CVI運(yùn)行引擎初始化(InitCVIRTE函數(shù))、加載面板(LoadPanel函數(shù))、顯示面板(DisplayPanel函數(shù))、開(kāi)始消息隊(duì)列循環(huán)(RunUserInterface函數(shù))。其中RunUserInterface會(huì)不斷的檢查面板的消息或者操作系統(tǒng)發(fā)送的消息,永遠(yuǎn)不會(huì)返回,除非用戶(hù)主動(dòng)調(diào)用QuitUserInterface函數(shù)中止消息循環(huán)。所以,正常運(yùn)行狀態(tài)下,main函數(shù)中的DiscardPanel永遠(yuǎn)不會(huì)被執(zhí)行,main函數(shù)永遠(yuǎn)不會(huì)退出,直到程序被關(guān)閉,主函數(shù)如下。
int main (int argc, char *argv[])
{if
(InitCVIRTE (0, argv, 0) == 0)
return -1; /* out
of memory */
if
((panelHandle = LoadPanel (0, "show.uir", PANEL)) < 0)
return -1;
DisplayPanel(panelHandle);
RunUserInterface();
DiscardPanel(panelHandle);
return 0;}
1.2、回調(diào)函數(shù)一
MainCallBack是我們?cè)诿姘鍖傩跃庉嬁蛑刑顚?xiě)的Callback Function的名字,負(fù)責(zé)執(zhí)行主程序面板消息的響應(yīng)代碼。在switch語(yǔ)句中,我們可以看到,CVI已經(jīng)事先為我們生成好了三個(gè)面板最常用的事件:EVENT_GOT_FOCUS、EVENT_LOST_FOCUS以及EVENT_CLOSE。分別在對(duì)應(yīng)的case中添加代碼,即可在窗口被激活、窗口失活、以及點(diǎn)擊窗口右上角“關(guān)閉”按鈕時(shí)執(zhí)行的代碼。callbackData表示消息發(fā)出時(shí)所附帶的數(shù)據(jù)。可是eventData1以及eventData2卻容易讓初學(xué)者云里霧里。其實(shí)我們只需要選中任意case語(yǔ)句中的事件(此處可以選擇EVENT_GOT_FOCUS),右擊選擇Go To Defination之后即可發(fā)現(xiàn),CVI User Interface的事件定義全在這里。對(duì)eventData1以及eventData2的說(shuō)明,也在定義的注釋中有所說(shuō)明。
在此,為了讓用戶(hù)點(diǎn)擊程序右上角的關(guān)閉按鈕時(shí),程序可以順利關(guān)閉,在case EVENT_CLOSE語(yǔ)句后面添加QuitUserInterface函數(shù):
int CVICALLBACK MainCallBack (int panel, int
event, void *callbackData,
int eventData1, int eventData2)
{
switch(event)
{
case EVENT_GOT_FOCUS:break;
case EVENT_LOST_FOCUS:break;
case EVENT_CLOSE:
QuitUserInterface(0);break;
}
return 0;
}
1.3、回調(diào)函數(shù)二
這個(gè)函數(shù)響應(yīng)五個(gè)鍵的功能,代碼如下。
int CVICALLBACK MainPanelBtnCallback (int panel, int control, int event,void *callbackData, int eventData1, int eventData2)
{
switch(event)
{
case EVENT_COMMIT:
switch(control)
{
char Name[20] = {0};int Number = 0;
case PANEL_BTN_Add: //增加
Creat();break;
case PANEL_BTN_Delete: //刪除
delet(Head); break;
case PANEL_BTN_Show: //顯示
print (Head);break;
case PANEL_BTN_insert: //插入
insert (Head);break;
case PANEL_BTN_Change: //更改
change (Head);
break;
}
break;
}
return 0;
}
02運(yùn)行模式
點(diǎn)擊菜單 Run-Debug Project (或點(diǎn)擊工具欄的綠色三角形按鈕)即可直接編譯并運(yùn)行當(dāng)前工程,同時(shí)也可以在工程所在目錄下生成exe文件。
右擊工程名并選擇Build(或點(diǎn)擊菜單 Build-Create Debuggable Executable)即可編譯并生成exe文件。
在CVI代碼編輯窗口中單擊代碼前空白部分或者按F9按鍵,則可以在對(duì)應(yīng)的C語(yǔ)言語(yǔ)句處設(shè)置斷點(diǎn)。
在程序中斷時(shí),單擊菜單Window即可控制開(kāi)啟或關(guān)閉 Memory (內(nèi)存)、 Variables (變量)、 Watch(監(jiān)控)窗口,通過(guò)查看或者修改對(duì)應(yīng)的參數(shù)的值來(lái)方便的調(diào)試程序。
-
LabWindows
+關(guān)注
關(guān)注
15文章
62瀏覽量
47928 -
管理器
+關(guān)注
關(guān)注
0文章
242瀏覽量
18493 -
CVI
+關(guān)注
關(guān)注
9文章
41瀏覽量
22181 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
87瀏覽量
11543 -
ui界面
+關(guān)注
關(guān)注
0文章
11瀏覽量
1569
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論