LabWindows原创教程(5)

2019-03-10 17:51

我们可以在CVI为我们生成的框架中添加或修改代码,以实现具体的功能。在添加或修改代码之前,我们先来逐一分析CVI生成的框架代码做了什么。

cvirte.h、userint.h分别是CVI运行时库(CVI Run-Time Engine)、CVI用户界面库(CVI User Interface)的头文件,分别包含了CVI框架运行、CVI用户界面运行所需要的基本函数的声明与定义。1.h是界面文件1.uir的头文件库,包含了界面中的控件的定义与声明。而panelHandle为面板的全局句柄,当对面板或者面板上的控件进行操作时经常用到。

main函数是用户程序运行时首先被执行的函数。main函数实现的功能分别是CVI运行引擎初始化(InitCVIRTE函数)、加载面板(LoadPanel函数)、显示面板(DisplayPanel函数)、开始消息队列循环(RunUserInterface函数)。其中RunUserInterface会不断的检

查面板的消息或者操作系统发送的消息,永远不会返回,除非用户主动调用

QuitUserInterface函数中止消息循环。所以,正常运行状态下,main函数中的DiscardPanel永远不会被执行,main函数永远不会退出,直到程序被关闭。

MainCallBack是我们在面板属性编辑框中填写的Callback Function的名字,负责执行主程序面板消息的响应代码。在switch语句中,我们可以看到,CVI已经事先为我们生成好了三个面板最常用的事件:EVENT_GOT_FOCUS、EVENT_LOST_FOCUS以及EVENT_CLOSE。分别在对应的case中添加代码,即可在窗口被激活、窗口失活、以及点击窗口右上角“关闭”按钮时执行的代码。

CVI初学者可能会被MainCallBack前面的从未见过的CVICALLBACK吓倒。其实我们只需要选中CVICALLBACK之后右击,选择Go To Defination即可看到:

CVICDECL仍然不是我们的C语言关键字。继续选中CVICDECL之后右击,选择Go To Defination查看CVICDECL的原型:

至此,CVICALLBACK真相大白。其实CVICALLBACK只是__cdecl的宏定义。什么?不懂

__cdecl是什么意思?赶紧拿起手中的手机,访问Google搞清楚它们的神奇功效吧! CVI初学者也可能被MainCallBack后面跟着的一堆参数吓倒,不知道他们是做何用,“不管他们行不行”。panel好理解,就是消息发生所在的面板的句柄。callbackData表示消息发出时所附带的数据。可是eventData1以及eventData2却容易让初学者云里雾里。其实我们只需要选中任意case语句中的事件(此处可以选择EVENT_GOT_FOCUS),右击选择Go To Defination之后即可发现,CVI User Interface的事件定义全在这里。对eventData1以及eventData2的说明,也在定义的注释中有所说明。

在此,为了让用户点击程序右上角的关闭按钮时,程序可以顺利关闭,在case EVENT_CLOSE语句后面添加QuitUserInterface函数:

Calculate函数是我们在面板中创建的按钮(Command Button)控件的消息响应函数,函数框架跟前面的主面板的消息响应函数类似。我们需要在此添加按钮按下之后需要执行的代码。Calculate函数添加响应之后的代码如下:

需要提醒大家的是,作为CVI的初学者,请在对照示例进行实际操作时,不要直接Copy+Paste上面的代码。自己对照着上面的代码一个字母一个字母的敲进去,会对扎实、

牢固的学习掌握CVI具有很大的帮助的。

GetCtrlVal是获取控件的当前值的函数,其函数声明如下:

其中value为控件的当前值变量的指针。panelHandle参数为函数面板的句柄,之前已经提到。可是控件的句柄controlID如何获得呢?

最简单的方法就是,控件的句柄即[控件所在的面板的Constant Name]_[控件的Constant Name]。若控件所在面板的Constant Name为PANEL,控件的Constant Name为NAME,那么控件的句柄即为PANEL_NAME。其中,面板或者控件的Constant Name都可以通过双击面板或者双击控件来进行设置。

另外一种方法即打开.uir同名的.h文件,查找对应的控件的定义。我们在1.h文件中发现如下代码:

即可得知,“参数A”控件的句柄为PANEL_PARA_A。 SetCtrlVal是设置控件的当前值的函数,其函数声明如下:

同GetCtrlVal一样,调用SetCtrlVal并填入面板、控件句柄之后即可设置控件的值。 GetCtrlVal、SetCtrlVal、GetCtrlAttribute以及SetCtrlAttribute四个函数,是对几乎所有控件都适用的函数,在CVI的GUI程序中,使用极其频繁,是学习CVI的GUI编程必须掌握的四个函数。

2.1.6 运行、调试

点击菜单Run-Debug Project(或点击工具栏的绿色三角形按钮)即可直接编译并运行当前工程,同时也可以在工程所在目录下生成exe文件。

右击工程名并选择Build(或点击菜单Build-Create Debuggable Executable)即可编译并生成exe文件。

在CVI代码编辑窗口中单击代码前空白部分或者按F9按键,则可以在对应的C语言语句处设置断点。

在程序中断时,单击菜单Window即可控制开启或关闭Memory(内存)、Variables(变量)、Watch(监控)窗口,通过查看或者修改对应的参数的值来方便的调试程序。 在本节中,我们已经通过编写并运行一个GUI的实例,了解了在CVI下用C语言开发GUI程序的基本过程。至此,大家已经算是对CVI入门了,大家已经可以尝试着自行开发一些有用、好玩的程序了。

2.2 借助帮助文档使用更多控件更多功能

一般软件在设计时都会遵循二八定律,即80%的人通常只使用一个软件20%的功能,但是另外80%的功能却对20%的人来说很重要。对于CVI初学者也一样,任何教程只会告诉初学者20%的功能如何去使用,而剩下的80%的功能只能由使用者根据CVI软件提供的帮助文档或者自行查找相关的资料来使用/实现。

授之以鱼不如授之以渔,下面我们将针对CVI初学者经常遇到的几个问题,提供解决问题的方法。

2.2.1 随心使用更丰富的CVI控件

CVI具有丰富的控件,从一般的按钮、界面到图表、开关。在使用CVI提供的丰富、强大的控件之前,我们必须先对CVI提供了哪些控件有一个大致的了解。 CVI控件的类型列举如表 2?1所示。

表 2?1 CVI的控件类型

数值型控件(Numeric) 命令按钮(Command Button) 指示灯(LED) 列表控件(Ring) 装饰控件(Decoration) 图片控件(Picture) 定时器控件(Timer) 文本型控件(Text ) 双态按钮(Toggle Button) 二值开关(Binary Switch) 列表框(List Box) 图形控件(Graph) 表格控件(Table) 画布控件(Canvas)


LabWindows原创教程(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:忏悔文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: