• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 测试测量 > 技术文章 > LabWindows/CVI虚拟仪器设计技术基本控件使用之:回调函数

LabWindows/CVI虚拟仪器设计技术基本控件使用之:回调函数

录入:edatop.com    点击:

1.1 回调函数

1.1.1 回调函数设计方法 

在LabWindows/CVI 程序设计系统中,一个程序可分为若干个程序模块,每个模块用来实现一个特定的功能,这些模块可以是子程序也可以是回调函数。一个LabWindows/CVI 应用程序由一个主函数和若干个其他函数构成,由主函数调用其他函数,其他函数之间也可互相调用,并且可以将一些常用的功能编写成函数形式,供其他模块调用,以提高代码利用率,减少程序编写的工作量。实际上,主程序为用户功能逻辑的入口点,任何一个C 语言程序都需要通过主函数进入该程序的消息循环。

 

回调函数是系统框架设计中非常重要的一种手段,所谓回调函数(callback )是指一个通过函数指针调用的函数。回调函数可由用户设计并被系统所调用,主要用于截获消息、获取系统信息或处理异常事件。回调函数必须遵守事先规定好的参数格式和传递方式,否则会引起程序或系统的崩溃。在使用LabWindows/CVI 进行程序设计时,用框架确定主要的处理流程,而将某些具体的实现交给用户来做。使用回调函数实际上就是在调用某个函数时,将一个函数(这个函数为回调函数)的地址作为参数传递给另一个函数。而另一个函数在需要时,利用传递的地址调用回调函数来处理消息或完成一定的操作。如C 函数库中的qsort 函数,它可以接收一个函数指针做参数来确定排序的策略,用到的就是回调函数的方法。又如,当用Windows 进行系统消息处理时,如果用户注册了回调函数,系统中该消息触发时会调用这个回调函数,使用户逻辑得以执行。

 

在LabWindows/CVI 中,采用回调函数形式响应系统消息循环。回调函数能响应产生于用户界面库(User Interface Library )的所有事件,其回调函数原型定义存储于userint.h 头文件中。面板、菜单、控件等都可安装回调函数,对于特定的接口对象,LabWindows/CVI 会分配适合的回调函数以使程序正常运行。包括系统空闲(Idle)事件和任务结束(end-task)事件都可以通过主回调函数得到响应与执行。

 

在LabWindows/CVI 系统中,一些事件通过GUI 界面产生并传递给回调函数。如回调函数接收到用户界面的鼠标点击(EVENT_LEFT_CLICK )事件,连同一些相关信息可被记录下来,包括回调函数中鼠标的X轴(eventData2)、Y轴(eventData1 )坐标,面板(panel)、控件(control)信息,并可以通过回调数据(callback data )传递用户自定义数据。

 

LabWindows/CVI 中的回调函数宏定义为CVICALLBACK 存储于cvidefs.h 头文件中,其定义为:#define CVICDECL __cdecl 

#define CVICALLBACK  CVICDECL

CVICALLBACK 常被用来定义函数指针,

如:typedef void (CVICALLBACK * MenuDimmerCallbackPtr)(int menuBar,  int panel);

值得注意的是,CVICALLBACK 宏定义在进行编译时优先于函数,以保证任何用户界面库函

数以cdecl 方式被编译,即使stdcall 调用约定下也是如此。

 

在LabWindows/CVI 中,由五类对象可通过事件触发回调函数,即控件触发、面板触发、菜单触发、定时器触发和主回调函数触发,回调函数触发优先级定义如下。

 

控件触发优先级:

●控件回调函数

●面板回调函数(键盘和鼠标事件)

●主回调函数

面板触发优先级:

●面板回调函数

●主回调函数

菜单触发优先级:

●菜单项回调函数

●主回调函数

定时器触发优先级:

●控件回调函数

主回调函数触发优先级:

●主回调函数

 

值得注意的是,EVENT_COMMIT 事件是存放在用户事件队列中的,通过GetUserEvent 函数

传递给所有回调函数。

1.1.2 回调函数程序设计 

(1)面板设计

编写一个伪随机信号发生器程序,并将产生的数据在Graph 控件中显示出来,将生成程序的文件名在String 控件中显示。为了使整个面板居中显示,双击面板调出Edit Panel 对话框,选择Auto-Center Vertically (when loaded) 和Auto-Center horizontally (when loaded),并点击"Other Attributes…"按钮,选择Movable 、Can Minimize 、Title Bar Visible 、Use Windows Visual Styles for Controls 项。面板设计如图1-1 所示,面板中主要控件属性设置如表1-1 所示。

 

图1-1 回调函数面板

表1-1 控件属性设置表

 

常量名

控件类型

控件的主要属性

PANEL 

Panel 

标题:回调函数回调函数:PanelCB 

GRAPH 

Graph 

标题:波形显示

STRING

 String 

标题:文件名

OKBUTTON

 Command Button 

标题:显示(__S) 回调函数:OkCallback 

QUITBUTTON

 Command Button 

标题:退出(__Q) 回调函数:QuitCallback 

点击浏览:矢量网络分析仪、频谱仪、示波器,使用操作培训教程

上一篇:LabWindows/CVI虚拟仪器设计技术基本控件使用之:三态开关
下一篇:利用信号调节器的抗混淆滤波器 实现混合信号、多模态传感器调节

微波射频测量操作培训课程详情>>
射频和天线工程师培训课程详情>>

  网站地图