第03讲 事件2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3讲事件和用户交互

本章介绍LabWmdows/CVI中面板和控件事件的概念、分类和功能,以及如何将鼠标集成到应用程序中去,并且简要介绍了控件响应函数的构成和功能。学习完本章的内容,读者可以深入理解LabWindows/CVI编程的结构并且能更为熟练地应用LabWindows/CVI面板和控件的事件.

3.1.1理解事件(什么叫事件)

LabWindows/CVI应用程序是以事件的方式驱动的。这是理解LabWindows/CVI 编程的基础,可以帮助用户理解程序的整个运行机制。

LabWindows/CVI中的事件可以是以下三种情况:

•外界用户操作引起的事件•(最常见的有鼠标点击、键盘按键等)。

操作系统发送的消息•(例如时钟信号等)。

应用程序之间的相互发送消息或者程序本身向自己发送的消息在LabWindows/CVI中用回调函数来对发生的事件作出响应,。

也就是说在事件发生后执行相应的回调函数中的语句

LabWndows/CVI和许多Windows下可视化编程软件一样,都是以事件和事件驱动为基础的。“事件驱动”的意思是说只有在事件发生时,程序才会运行。在没有事件发生时,整个程序是处于停滞状态的。

而事件本身在程序设计中是非常常见的。在LabWindows/CVI中,面板的移动、缩放、关闭、控件的单击、双击等等都是事件。

3.1.2面板事件

LabWndows/CVI中的面板事件是指对激活面板的操作而产生的事件。面板事件包括以下类型,如表3.1所示。

控件事件和面板事件非常类似,除EVENT_CLOSE 、EVENT_PANEL_SIZE 和 EVENT_PANEL_MOVE

三种事件外,控件还具有其他各种面板事件。面板所具有的事件在控件中都适用。另外,某些控件具有如表3-2所示的几种事件。 3.1.4 用户事件及其意义

1. EVENT_CLOSE

应用于面板对象。当用户从系统菜单执行关闭命令或点击窗口右上角的关闭按钮时产生此事件。

回调函数中的事件数据无意义。

2. EVENT_COMMIT

应用于菜单、数值控件、颜色选择数值控件(color numeric )、数值滑动条(numericslide )、字符串、文本框、命令按钮、图形按钮(picture button )、文本按钮(text button )、单选控件(radio button )、指示灯(LED )、二值开关、下拉列表(ring )、滑动列表(ring slide )、图片列表(picture ring )、列表框、曲线图和表格控件。

当用户在界面上提交一项操作时会产生此事件,如选择菜单项或在输入框中输入数值后按。LabWindows/CVI 除了将COMMIT 事件传递给控件回调函数外,还将其加入到GetUserEvent 事件队列,除非此事件被忽略。

当选择菜单项产生 COMMIT 事件时,传递给主回调函数的事件数据

eventData1 为产生事件的面板或菜单条的标识,eventData2 为被选择的菜单项的回调函数产生的数据(callbackData )。控件回调函数和主回调函数的关系将在下一节介绍。

当表格控件产生 COMMIT 事件时,事件数据eventData1 为产生事件的表格单元的行号,eventData2 为列号。如果事件涉及了多个表格单元,例如对多个单元排序或粘贴数据,eventData1 和eventData2 都会是0。

3. EVENT_DISCARD

应用于面板和各种控件。

当面板或控件被从内存中放弃的时候产生此事件。

回调函数中的事件数据无意义。

4. EVENT_END_TASK

当windows 要退出程序时,LabWindows/CVI 将此事件传递给主回调函数。忽略此事件可以避免windows 退出程序。

回调函数中的事件数据无意义。

5. EVENT_GOT_FOCUS

应用于面板、数值控件、颜色选择数值控件、数值滑动条、字符串、文本框、命令按钮、图形按钮、双值按钮、文本按钮、单选控件、指示灯、二值开关、下拉列表、滑动列表、图形列表、列表框、曲线图、画布和表格控件。

当控件并非当前激活控件(active control),而用户通过鼠标点击、按键使之成为激活控件时将产生此事件。事件数据eventData1 为前一个激活控件。

6. EVENT_IDLE

只要LabWindows/CVI 处理事件,这个事件就会定期传递给主回调函数,可以通过SetIdleEventRate 函数设定此事件产生的频率。这个事件已经废弃,建议使用定时器控件。

回调函数中的事件数据无意义。

7. EVENT_KEYPRESS

应用于面板、数值控件、颜色选择数值控件、数值滑动条、字符串、文本框、命令按钮、图形按钮、双值按钮、文本按钮、单选控件、指示灯、二值开关、下拉列表、滑动列表、图形列表、列表框、曲线图、画布和表格控件。

按键事件被传递给当前激活控件对应的回调函数。如果忽略此事件,LabWindows/CVI不对此事件进行进一步处理。

如果用户在控件中输入了双字节字符,回调函数会接收到两次

VENT_KEYPRESS事件,在这种情况下应该忽略第一次事件,可以用函数KeyPressEventIsLeadByte来判断接收到的是否是双字节字符的第一个字节。当接收到第二次事件时,KeyPressEventIsTrailByte函数返回值为真(TRUE),这时可以用GetKeyPressEventCharacter函数来获取完整的双字节字符。

事件数据eventData1 为键码,eventData2 为指向键码的指针。

8. EVENT_LEFT_CLICK

应用于面板和各种控件。

当用户在面板上任何地方点击鼠标左键的时候,将产生此事件,它被传递到面板的回调函数和被点击控件的回调函数。

事件数据eventData1 为鼠标垂直坐标,eventData2 为鼠标水平坐标。

9. EVENT_LEFT_DOUBLE_CLICK

应用于面板和各种控件。

当用户在面板上任何地方双击鼠标左键的时候,将产生此事件,它被传递到面板的回调函数和被点击控件的回调函数。

事件数据eventData1 为鼠标垂直坐标,eventData2 为鼠标水平坐标。

相关文档
最新文档