微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > LabWindows/CVI虚拟仪器设计技术基本控件使用之:回调函数

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

时间:11-13 来源:与非网 点击:

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

Str

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top