- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
LabWindows/CVI虚拟仪器设计技术基本控件使用之:回调函数
(2)程序源代码
?//头文件声明,系统自动添加
#include <ansi_c.h>
#include <cvirte.h>
#include <userint.h>
#include "回调函数.h"
//全局静态变量
static int panelHandle;
//主函数
int main (int argc, char *argv[])
{
//初始化LabWindows/CVI 运行时库引擎
if (InitCVIRTE (0, argv, 0) == 0)
//如果返回值为0, 则初始化失败,返回–1
return –1;
//装载面板,返回面板句柄
if ((panelHandle = LoadPanel (0, " 回调函数.uir", PANEL)) < 0)
//如果装载面板失败,则返回–1
return –1;
//获得*argv[] 中的字符串,即为文件名
SetCtrlVal (panelHandle, PANEL_STRING, argv[0]);
//显示面板
DisplayPanel (panelHandle);
//运行用户界面
RunUserInterface ();
//删除面板句柄
DiscardPanel (panelHandle);
//主函数执行成功,返回0
return 0;
}
//面板回调函数
int CVICALLBACK PanelCB (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
switch (event)
{
//面板响应事件
case EVENT_CLOSE:
// 调用退出按钮的EVENT_COMMIT 事件
? QuitCallback (panelHandle, PANEL_QUITBUTTON, EVENT_COMMIT, 0, 0, 0);
break;
}
//函数返回值,0 表示成功
return 0;
}
//退出按钮
int CVICALLBACK QuitCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
if (event == EVENT_COMMIT)
{
//退出用户界面
QuitUserInterface (0);
}
return 0;
}
//显示按钮
int CVICALLBACK OkCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
//定义局部变量
int i;
double datapoints[100];
switch (event)
{
case EVENT_COMMIT:
// 产生100 个随机数,放入数组datapoints 中
for (i = 0; i < 100; i++)
{
datapoints[i] = rand() / 32767.0 * 100.0;
}
// 清除以前Graph 中绘制的波形
DeleteGraphPlot (panelHandle, PANEL_GRAPH, -1, VAL_IMMEDIATE_DRAW);
// 在Graph 中绘制波形
PlotY (panelHandle, PANEL_GRAPH, datapoints, 100, VAL_DOUBLE, VAL_THIN_LINE,
VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED);
break;
}
return 0;
}
3:程序注释
① main 函数
每一个C 程序都必须从一个main 函数开始,在调用其他函数流程后再次回到main 函数,并且在main 函数中结束整个程序的运行。实际上,main 函数可以放在程序的任何地方:有些程序员喜欢把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
在C语言中,main 函数可以有三个参数,即:argc,argv 和env 。
argc :整数类型,表示传给main 函数的命令行参数个数,一般为1。
*argv[] :二维字符串数组。在LabWindows/CVI 中,argv[0] 为程序运行时的文件名,与编译设置有关,在菜单Build→Configuration 下有两个选项,即:Release 和Debug。当选择Release 时,argv[0] 为当前工程名加上".exe";当选择Debug 时,argv[0] 为当前工程名加上"_dbg.exe"。argv[argc] 为NULL 。
*env:二维字符串数组,为环境变量。在LabWindows/CVI 中,env[]一般为空字符串且省略不写。
LabWindows/CVI 启动时总是把这三个参数传递给main 函数,参数的传递顺序为:argc 、argv 、env,可以在用户程序中加以说明也可以不说明,如果说明了部分或全部参数,它们就成为main 主函数的局部变量。main 主函数的声明方式主要有以下几种:
main (void)
main (int argc, char *argv[])
main (int argc, char *argv[], char *env[])
② InitCVIRTE 函数
初始化LabWindows/CVI 运行时(库)引擎。在使用外部编译器Visual C++ 、Borland C++ Builder 时调用,如果不使用外部编译器,不会影响程序正常运行。函数原型为:
int InitCVIRTE (void *HInstance, char *Argv[], void *Reserved);
*HInstance:对于main 函数应为0;对于WinMain 函数应为hInstance ;对于DllMain 应为
hInstDLL。
*Argv[] :对应于main 函数的*argv[] 参数。
*Reserved:保留参数,设置为0。
上一篇:LabWindows/CVI虚拟仪器设计技术基本控件使用之:三态开关
下一篇:利用信号调节器的抗混淆滤波器
实现混合信号、多模态传感器调节