上期对LABwindows/CVI建立的学生管理器的UI界面中的控件进行编程,但是没有做回调处理,这期主要对其中控件进行回调函数的设计!
关键词:回调函数;
main函数是用户程序运行时首先被执行的函数。main函数实现的功能分别是CVI运行引擎初始化(InitCVIRTE函数)、加载面板(LoadPanel函数)、显示面板(DisplayPanel函数)、开始消息队列循环(RunUserInterface函数)。其中RunUserInterface会不断的检查面板的消息或者操作系统发送的消息,永远不会返回,除非用户主动调用QuitUserInterface函数中止消息循环。所以,正常运行状态下,main函数中的DiscardPanel永远不会被执行,main函数永远不会退出,直到程序被关闭,主函数如下。
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;}
MainCallBack是我们在面板属性编辑框中填写的Callback Function的名字,负责执行主程序面板消息的响应代码。在switch语句中,我们可以看到,CVI已经事先为我们生成好了三个面板最常用的事件:EVENT_GOT_FOCUS、EVENT_LOST_FOCUS以及EVENT_CLOSE。分别在对应的case中添加代码,即可在窗口被激活、窗口失活、以及点击窗口右上角“关闭”按钮时执行的代码。callbackData表示消息发出时所附带的数据。可是eventData1以及eventData2却容易让初学者云里雾里。其实我们只需要选中任意case语句中的事件(此处可以选择EVENT_GOT_FOCUS),右击选择Go To Defination之后即可发现,CVI User Interface的事件定义全在这里。对eventData1以及eventData2的说明,也在定义的注释中有所说明。
在此,为了让用户点击程序右上角的关闭按钮时,程序可以顺利关闭,在case EVENT_CLOSE语句后面添加QuitUserInterface函数:
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;
}
这个函数响应五个键的功能,代码如下。
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;
}
点击菜单 Run-Debug Project (或点击工具栏的绿色三角形按钮)即可直接编译并运行当前工程,同时也可以在工程所在目录下生成exe文件。
右击工程名并选择Build(或点击菜单 Build-Create Debuggable Executable)即可编译并生成exe文件。
在CVI代码编辑窗口中单击代码前空白部分或者按F9按键,则可以在对应的C语言语句处设置断点。
在程序中断时,单击菜单Window即可控制开启或关闭 Memory (内存)、 Variables (变量)、 Watch(监控)窗口,通过查看或者修改对应的参数的值来方便的调试程序。
全部0条评论
快来发表一下你的评论吧 !